吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2024|回复: 12
收起左侧

[新手问题] 关于IDA与od 相同机器码显示不同情况该如何分辨?

[复制链接]
神慯 发表于 2021-4-13 23:44
萌新初学逆向和汇编

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

222.png

而在OD(X32dbg)中是
lea esi,dword ptr ds:[eax+1]
mov dl,byte ptr ds:[eax]

111.png

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

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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

爱飞的猫 发表于 2021-4-13 23:53
本帖最后由 jixun66 于 2021-4-13 23:56 编辑

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

movsx - BYTE 扩展到 DWORD
lea - 地址计算,与大小无关。
mov dl,[eax] - 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

我是先看王爽的汇编语言书 然后边看边找点re题一步步调试熟悉
 楼主| 神慯 发表于 2021-4-14 10:10
无闻无问 发表于 2021-4-14 06:55
看接收的地址或寄存器位数不是一样吗?比如dl,al

但64位程序的话,那地址就是八个字节了,主要考虑到这点
冥界3大法王 发表于 2021-4-14 12:32
Ollydbg/x32dbg/x64dbg同步调试插件帮助你,我们都是一家人,只是“代号”不一样。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 04:52

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表