神慯 发表于 2021-4-13 23:44

关于IDA与od 相同机器码显示不同情况该如何分辨?

萌新初学逆向和汇编

在做题的时候发现,IDA汇编代码可能更”精简“,
比如如下两行代码
在IDA中是
lea esi,
mov dl,



而在OD(X32dbg)中是
lea esi,dword ptr ds:
mov dl,byte ptr ds:



我的主要问题是 ida中省略了dword ptr和Byte ptr这种关键字,那如何分辨他赋值多少个字节呢?
翻了会汇编语言书,大概想到:
32位程序,dx是16位,dl是是8位,所以默认取1个字节,因为dl只能容纳一个字节
lea赋值的是地址,地址是8个16进制数=4个字节=双字,esi是32位寄存器,正好能存放四个字节(双字),所以是dword ptr。
如果这样想,那么可以猜测是因为“正好”,所以IDA就给精简显示了?

不知道我的想法对不对,感谢解答!

爱飞的猫 发表于 2021-4-13 23:53

本帖最后由 jixun66 于 2021-4-13 23:56 编辑

一样的,只是写法(字节码反汇编产生的对应指令)不同。

movsx - BYTE 扩展到 DWORD
lea - 地址计算,与大小无关。
mov dl, - dl 是字节,右边若是引用地址只能用 byte[...] 写法。

另外这个是 INTEL 汇编语法,还有个 AT&T 的写法和这个有很大不同。

cndml 发表于 2021-4-14 15:48

默认的od的反编译的结果才是标准写法,地址操作数指明大小,这个也可以在od的调试设置里设置成不显示操作数大小,自己写汇编还是坚持标准写法,不容易出错,特别是在64位编程的时候。对照看一下intel的机器指令集就明白了,每个指令对操作数的大小都是有规定的,

Gordon_c 发表于 2021-4-14 00:16

jixun66 发表于 2021-4-13 23:53
一样的,只是写法(字节码反汇编产生的对应指令)不同。

movsx - BYTE 扩展到 DWORD


请教一下,你们都是怎么学习汇编的?

badboybilly 发表于 2021-4-14 01:59

怎么学习汇编?

无闻无问 发表于 2021-4-14 06:55

看接收的地址或寄存器位数不是一样吗?比如dl,al

神慯 发表于 2021-4-14 10:06

jixun66 发表于 2021-4-13 23:53
一样的,只是写法(字节码反汇编产生的对应指令)不同。

movsx - BYTE 扩展到 DWORD


感谢!!!

神慯 发表于 2021-4-14 10:07

Gordon_c 发表于 2021-4-14 00:16
请教一下,你们都是怎么学习汇编的?

我是先看王爽的汇编语言书 然后边看边找点re题一步步调试熟悉

神慯 发表于 2021-4-14 10:08

badboybilly 发表于 2021-4-14 01:59
怎么学习汇编?

我是先看王爽的汇编语言书 然后边看边找点re题一步步调试熟悉

神慯 发表于 2021-4-14 10:10

无闻无问 发表于 2021-4-14 06:55
看接收的地址或寄存器位数不是一样吗?比如dl,al

但64位程序的话,那地址就是八个字节了,主要考虑到这点

冥界3大法王 发表于 2021-4-14 12:32

Ollydbg/x32dbg/x64dbg同步调试插件帮助你,我们都是一家人,只是“代号”不一样。{:301_987:}
页: [1] 2
查看完整版本: 关于IDA与od 相同机器码显示不同情况该如何分辨?