c++ - 我的主要功能反汇编中所有这些奇怪的汇编指令是什么?

标签 c++ visual-studio disassembly

所以我有这个主要功能,它会产生很多奇怪的指令。我正在使用Visual Studio 2019,并且处于 Debug模式,因此优化被禁用。这些指示在做什么?

int main()
{
00D340E0  push        ebp  
00D340E1  mov         ebp,esp  
00D340E3  sub         esp,104h  
00D340E9  push        ebx  
00D340EA  push        esi  
00D340EB  push        edi  
00D340EC  lea         edi,[ebp-104h]  
00D340F2  mov         ecx,41h  
00D340F7  mov         eax,0CCCCCCCCh  
00D340FC  rep stos    dword ptr es:[edi]  
00D340FE  mov         eax,dword ptr [__security_cookie (0D3A024h)]  
00D34103  xor         eax,ebp  
00D34105  mov         dword ptr [ebp-4],eax  
00D34108  mov         ecx,offset _842A6236_main@cpp (0D3C012h)  
00D3410D  call        @__CheckForDebuggerJustMyCode@4 (0D31208h) 

(the rest of the file...)

编辑:奇怪,我的意思是我不明白这里发生了什么,不是那不是标准。

最佳答案

这些是调试助手。
__security_cookie用于检查超过堆栈末尾的写操作(例如,如果溢出基于堆栈的缓冲区)。退出功能时进行实际检查。
__CheckForDebuggerJustMyCode允许调试器跳过“系统,框架,库和其他非用户调用”,请参阅here

这段代码:

lea         edi,[ebp-104h]  
mov         ecx,41h  
mov         eax,0CCCCCCCCh  
rep stos    dword ptr es:[edi]

如果您取消引用未初始化的指针,则用垃圾字节填充堆栈帧,例如,垃圾字节将导致异常。

发布版本中没有这些东西,只有调试版本中有。

关于c++ - 我的主要功能反汇编中所有这些奇怪的汇编指令是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61111713/

相关文章:

c++ - 如何修改openCV中的部分多维矩阵?

c++ - 创建可在大多数 PC 上运行的 C++ 程序

c# - 如何在按钮悬停时在面板周围绘制边框?

c++ - 如何使用 gcc-linaro-arm-linux-gnueabihf-objdump 使用源代码行和文件名分解二进制文件?

arm - 解码ARM BL指令

c++ - 为什么 GetSystemMetrics() 返回这些值?

c++ - 映射键和值的对象

visual-studio - 什么是 “Microsoft C++ Visual Runtime Library: Runtime error!”,如何捕获?

c# - ASP.NET - 复合控件 - 在 CreateChildControls 抑制 Button Click 事件后添加动态控件

assembly - 修补时 IDA "Invalid Operand"错误