如何解决为什么反汇编代码没有使用 ebp 来获取输入参数?
我使用的是 Visual Studio 2015。
在 main()
下面调用 function(MyArray arg)
。
array1
参数通过堆栈传递。 (位置 1)
但是 [arg]
是从哪里来的?? (位置 2)
我认为它应该类似于 move ecx,dowrd ptr [ebp + 8]
。
这是某种 Visual Studio 友好显示吗?
#include "stdafx.h"
typedef int MyArray[10];
void function (MyArray arg)
{
printf ("\n[1] = %d\n",arg[1]);
}
int main()
{
MyArray array1 = { 1,2,3,4,5,6,7,8,9,0 };
printf ("\nMyArray size = %d,array1 size = %d\n",sizeof (MyArray),sizeof (array1));
function (array1);
return 0;
}
function (array1);
00D84DE1 lea eax,[array1]
00D84DE4 push eax ; <======= place 1. pass "array1" address via stack.
00D84DE5 call function (0D81352h)
00D84DEA add esp,4
void function (MyArray arg)
{
00A516E0 push ebp
00A516E1 mov ebp,esp
00A516E3 sub esp,0C0h
00A516E9 push ebx
00A516EA push esi
00A516EB push edi
00A516EC lea edi,[ebp-0C0h]
00A516F2 mov ecx,30h
00A516F7 mov eax,0CCCCCCCCh
00A516FC rep stos dword ptr es:[edi]
printf ("\n[1] = %d\n",arg[1]);
00A516FE mov eax,4
00A51703 shl eax,0
00A51706 mov ecx,dword ptr [arg] ;<=== place 2,where does the "[arg]" come from?
00A51709 mov edx,dword ptr [ecx+eax]
00A5170C push edx
00A5170D push offset string "\n[1] = %d\n" (0A56B30h)
00A51712 call _printf (0A51316h)
00A51717 add esp,8
}
添加 1 -- 2021 年 7 月 2 日晚上 9:59
编译标志:
/GS /analyze- /W3 /Zc:wchar_t /ZI /Gm /Od /Fd"Debug\vc140.pdb" /Zc:inline /fp:precise /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /RTC1 /Gd /Oy- /MDd /Fa"Debug" /EHsc /nologo /Fo"Debug" /Fp"Debug\ConsoleApplication1.pch"
链接标志:
/OUT:"C:\D\temp\ConsoleApplication1\Debug\ConsoleApplication1.exe" /清单 /NXCOMPAT /PDB:"C:\D\temp\ConsoleApplication1\Debug\ConsoleApplication1.pdb" /DYNAMICBASE "kernel32.lib" "user32.lib" "gdi32.lib" "winspool.lib" “comdlg32.lib” “advapi32.lib” “shell32.lib” “ole32.lib” “oleaut32.lib” "uuid.lib" "odbc32.lib" "odbccp32.lib" /DEBUG /MACHINE:X86 /增加的 /PGD:"C:\D\temp\ConsoleApplication1\Debug\ConsoleApplication1.pgd" /SUBSYSTEM:CONSOLE /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:"Debug\ConsoleApplication1.exe.intermediate.manifest" /错误报告:提示 /NOLOGO /TLBID:1
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。