Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 反编译汇编代码_C_Assembly_Decompiler - Fatal编程技术网

C 反编译汇编代码

C 反编译汇编代码,c,assembly,decompiler,C,Assembly,Decompiler,我正试图从一些反编译的汇编代码中拼凑出C代码,我有一个问题。我看到以下情况: SUB_L10195A01: ... call SUB_L1019CB90 db CCh; 'Œ' SUB_L10026990: push FFFFFFFFh push L101EA0C5 问题是什么 db CCh; 'Œ' 为了什么?通常有一个 retn 以前 SUB_L10026990: 这是毫无意义的。编译器假定被调用的函数永远不会返回

我正试图从一些反编译的汇编代码中拼凑出C代码,我有一个问题。我看到以下情况:

SUB_L10195A01:
    ...
    call    SUB_L1019CB90
    db  CCh;   'Œ'

SUB_L10026990:
    push    FFFFFFFFh
    push    L101EA0C5
问题是什么

db  CCh;   'Œ'
为了什么?通常有一个

retn

以前

SUB_L10026990:

这是毫无意义的。编译器假定被调用的函数永远不会返回

此外,您的反汇编程序也知道这一点。代码
0CCh
解码为
int 3
,通常会停止程序并显示错误。由于之前的代码永远不会返回(或者假设是这样),操作码不是列表的一部分,因此它被写为
db 0CCh
,而不是“指令
int 3


代码本身与上面的例程无关。编译器插入此字节是为了确保(1)如果程序运行超出界限,它将遇到此命令,然后停止,以及(2)将下一个函数的第一个字节与(最有可能的)4的倍数对齐,因此执行速度有一个小的但实际的增益。

Harold刚刚回答-CC是int3(调试中断)

<代码> Db</C>通常由汇编程序使用,以指定在“正则”程序集中添加的任意字节,而反汇编程序将它们作为一个“最后的工具”插入,当它们看到没有意义的序列时;在这里,我不知道您的反汇编程序为什么在

db
中插入
cc
字节,因为
cc
是常见的
int 3
操作码(通常用于中断调试器)


编译器通常围绕“常规”函数发出它们,用于填充/对齐/调试目的
Int3
的优点是在查看反汇编和十六进制内存视图时很容易发现,如果意外执行了调试器,则会打断调试器。您在
调用之后找到它的事实意味着
调用
意味着永远不会从中返回(想想
退出(1)
中止()
或类似的东西);或者(但不太可能),它可能是程序员故意添加的(例如,以Visual C++中固有的
\uu debugbreak
形式添加)。

CC是
int3
(debug break)。顺便说一句,我检查了一下,以确保CCh不是ret或它的任何变体。。