gpt4 book ai didi

c - arg 在 ASM 函数中包含什么?

转载 作者:太空宇宙 更新时间:2023-11-04 08:48:41 25 4
gpt4 key购买 nike

Main

push ebp
mov ebp, esp
and esp, 0FFFFFFF0h
sub esp, 30h
mov dword ptr [esp], 8 ; size
call _malloc
mov [esp+2Ch], eax
mov dword ptr [esp+4], 4
mov eax, [esp+2Ch]
mov [esp], eax
call __start

__start

arg_0= dword ptr 8
arg_4= dword ptr 0Ch

push ebp
mov ebp, esp
mov eax, [ebp+arg_4]
mov edx, eax
sar edx, 1Fh
shr edx, 1Eh
add eax, edx
and eax, 3
sub eax, edx
mov [ebp+arg_4], eax
mov eax, [ebp+arg_4]
cmp eax, 1
jz short loc_80489F0

上面的代码代表了我正在处理的项目的一部分,我需要将这个程序集逆向工程为相应的 C 代码。我相信我已经将 main() 放置在堆栈中,其中 [esp] 包含指向 malloc 的指针,而 [esp+4] 包含数字 4。

我很难弄清楚哪个 arg 包含,我假设 arg_0 包含 4,但 arg_4 让我失望了。

arg_0 和 arg_4 指的是什么?

谢谢!

最佳答案

将 C 中的定义视为 #define arg_0 8#define arg_4 0xc。它们由编译器生成,用于将参数的符号名称连接到它的参数以可读的方式在堆栈上偏移。在这种情况下,例如arg_4 位于基指针的正 12 处。在这个调用约定中(看起来像 Microsoft),基指针 ebp 指向前一个基指针,它就在返回地址的下面。参数相对于 ebp 处于正偏移,局部(自动)变量处于负偏移。

编译器已在 Main 中应用优化,为 malloc_start 的调用构建堆栈框架,其中一个设置为 特别是。要查看发生了什么,请绘制由 sub esp, 30h 指令分配的 48 字节堆栈的图片,并从那里仔细跟踪每条指令。真相终将大白。

关于c - arg 在 ASM 函数中包含什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20526721/

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