tpjia 发表于 2021-3-20 12:47

为什么OD代码与IDA代码不一样(OD自己增加了代码)

IDA找到关键代码,当我准备在OD中调试时,通过地址转换后,发觉相同位置的代码居然不一样,经过仔细搜索查找和人工对比,发现OD等调试器的反汇编代码比IDA反汇编代码多,不知道为什么OD要自动插入这些代码,我又用X64dbg和C32Asm打开对比,发现OD和x64dgb一致,IDA和C32Asm一致,请教各位这是为什么?如果遇到这种情况,添加代码后的地址如何在OD和IDA之间进行转换?
IDA反汇编代码:


c32asm反汇编代码:

OD反汇编代码:(蓝色框为OD自动添加的代码)


X32dbg反汇编代码:(蓝色框为x32dbg自动添加的代码)




tpjia 发表于 2021-3-20 16:06

fanvalen 发表于 2021-3-20 13:46
大概是载入内存与否的区别,
主要原因是load pe
程序不是按文件连续结构压入内存


pe装载时按段载入,修改导入表,从内存布局看这段代码位于.text段,和导入表也没关系,为什么载入后.text段的代码被修改了呢?请指教!

tpjia 发表于 2021-3-29 14:48

fanvalen 发表于 2021-3-20 13:46
大概是载入内存与否的区别,
主要原因是load pe
程序不是按文件连续结构压入内存


我知道的是分段映射到内存中,段的起始地址与文件起始地址不一致,但为何段中间的代码会不一致呢?

hy418474 发表于 2021-3-20 13:01

好东西啊,谢谢分享

winddyj 发表于 2021-3-20 13:02

没遇到过,用16进制编辑器,找到地方看原文件,看看到底是谁加了还是谁减了

白如雪 发表于 2021-3-20 13:10

其达到的效果是一样的。

只不过写法不太一样。

tpjia 发表于 2021-3-20 13:38

winddyj 发表于 2021-3-20 13:02
没遇到过,用16进制编辑器,找到地方看原文件,看看到底是谁加了还是谁减了

用c32asm的“对应HEX编辑”,显示与他的反汇编一致,应该是OD类调试器增加的。

tpjia 发表于 2021-3-20 13:41

白如雪 发表于 2021-3-20 13:10
其达到的效果是一样的。

只不过写法不太一样。

效果不一样,多了蓝框部分的调用,从代码看应该增加了对某个对象成员函数的调用

fanvalen 发表于 2021-3-20 13:46

大概是载入内存与否的区别,
主要原因是load pe
程序不是按文件连续结构压入内存
程序是把文件分成几类结构压入内存
具体结构去看od || dbg内存布局

coolkids1988 发表于 2021-3-20 15:11

用ida调试呢

tpjia 发表于 2021-3-20 16:09

coolkids1988 发表于 2021-3-20 15:11
用ida调试呢

IDA调试加载很慢,后半段代码反编译没成功,从前面部分看和OD类似,增加了代码。




页: [1] 2
查看完整版本: 为什么OD代码与IDA代码不一样(OD自己增加了代码)