在汇编中查找 Main

j.D*_*Doe 6 c++ debugging assembly reverse-engineering

我有简单的 C++ 程序:

#include <iostream>  
using namespace std;  
void main()  
{  
    cout << "Hello, world, from Visual C++!" << endl;  
}
Run Code Online (Sandbox Code Playgroud)

使用以下命令编译:cl /EHsc hello.cpp

我想开始调试可执行文件,如何在调试器中找到该main函数对应的汇编代码?(我使用的是x64dbg)

入口点与 Main 函数不同。我找到了 main 函数,它离入口点不近,我有字符串,我很容易找到它。

有没有任何方法或规则或最佳实践来猜测 main 相应的汇编代码在哪里?

编辑:

我有源代码,但我只是在学习 RE。

Nir*_*Izr 4

尽管入口点通常不是main在可执行文件中定义的,但这仅仅是因为编译器使用一些初始化代码进行包装是很常见的main

在大多数情况下,初始化代码非常相似,并且每个编译器都有几个版本之一。大多数这些函数都有IDA FLIRT 签名,使用 IDA 打开二进制文件将自动为您定义WinMainmain等函数。您还可以使用免费(试用)版本的 IDA。

如果情况并非如此,则main通过跟踪一级深度入口点函数内的几个调用,可以非常直接地从入口点到达 。该main调用通常在入口点函数末尾附近。

这是一个示例,main在底部附近选择了 function(请注意,这是使用 mingw 为 Windows 编译的 unix 可执行文件,因此这与大多数本机 win32 可执行文件有所不同)。

mingw32 可执行入口点