【发布时间】:2020-07-09 07:43:16
【问题描述】:
我用 c 编写了一个简单的程序,它调用一个名为 while_loop 的函数,参数为 4,3,2。该函数基本上只是一个while循环,我认为它与我的问题并不相关,因为它更像是一个通用问题。有人告诉我运行 objdump -d,所以我这样做了。
我有多个问题,所以就这样吧:
- 我知道在最左边的列中有地址,它们根据前面的字节数递增。我不太明白的是第二列。是正在执行的指令但是是十六进制的吗?这是否意味着 push %ebp 等于 55 ?我不太明白。
- 因为这是 IA-32 并且它是小端,我知道最低有效字节存储在最低地址。但是,我不明白这些字节的显示顺序是否与它们在内存中的位置有关。看第 3 行,“8b 55 10”这是否意味着最低地址中有 8b,我会反过来读,或者这是否意味着 10 在最低地址,我会反过来读?
- 左边的这些地址是绝对内存地址还是相对地址?
【问题讨论】:
-
将
objdump -drwC输出作为文本复制/粘贴到代码格式化块中,而不是图像中。 -
1) 是的。如果您对机器代码编码感兴趣,请查阅指令集参考手册。 2) 是
8b是最低地址。您需要交换多字节值,但您的示例中没有。 3) 绝对但虚拟。 -
我对您的问题投了反对票,因为您发布了一张代码图片。当您用文本替换它时,将收回反对票。
标签: assembly x86 endianness disassembly att