gpt4 book ai didi

assembly - 我用 ndisasm 看到的函数后面的汇编指令的用途是什么?

转载 作者:行者123 更新时间:2023-12-02 01:00:52 26 4
gpt4 key购买 nike

我反汇编了编译非常简单的源文件 test.c 所产生的代码,如下所示:

void main() {}

我运行这些命令将 main 函数链接到静态可执行文件(编者注:没有 CRT 启动代码,因此它只会崩溃),然后提取到一个平面二进制文件,并删除了几个部分,所以我可以将其提供给 ndisasm (编者注:它不像 objdump -drwC -Mintel 那样理解 ELF 元数据)

 gcc -c test.c 
ld -o test -Ttext 0x0 -e main test.o
objcopy -R .note -R .comment -S -O binary test test.bin
ndisasm -b 32 test.bin

这就是我得到的:

00000000  55                push ebp
00000001 89E5 mov ebp,esp
00000003 5D pop ebp
00000004 C3 ret
00000005 0000 add [eax],al
00000007 001400 add [eax+eax],dl
0000000A 0000 add [eax],al
0000000C 0000 add [eax],al
0000000E 0000 add [eax],al
00000010 017A52 add [edx+0x52],edi
00000013 0001 add [ecx],al
00000015 7C08 jl 0x1f
00000017 011B add [ebx],ebx
00000019 0C04 or al,0x4
0000001B 0488 add al,0x88
0000001D 0100 add [eax],eax
0000001F 001C00 add [eax+eax],bl
00000022 0000 add [eax],al
00000024 1C00 sbb al,0x0
00000026 0000 add [eax],al
00000028 D8FF fdivr st7
0000002A FF db 0xff
0000002B FF05 00000000 inc dword [dword 0x0]
00000031 41 inc ecx
00000032 0E push cs
00000033 088502420D05 or [ebp+0x50d4202],al
00000039 41 inc ecx
0000003A 0C04 or al,0x4
0000003C 04C5 add al,0xc5
0000003E 0000 add [eax],al

前四行之后的所有内容的目的是什么?为什么它会添加到 eax、2*eax、edx+0x52、比较等指向的内存位置?是为了检查程序是否正确执行还是其他什么?

最佳答案

我相信你已经反汇编了一些不是代码的位,这就是为什么它没有多大意义。

要了解文件可能包含的内容,我建议在完整二进制文件(ELF)上运行objdump,看看您是否可以识别上述字节任何部分中的序列。

关于assembly - 我用 ndisasm 看到的函数后面的汇编指令的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10816395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com