前言

在本文中,我将使用x86汇编和简易的小小程序片段,其中将会使用最新的C++ 23标准进行代码编写。所以当你开始阅读这篇短文时,希望你有理解C++ 23,内存,指针和标准Win32 API的基本概念的能力。

代码段

#include <iostream>

int main() {
    auto string = "Hello, World! ";
    auto integer = 114514;
    std::cout << string << integer << std::endl;
    system("pause");
    return 0;
}

在这段简单的代码中,很明显这只是一个利用了C++新特性的HelloWorld程序,不难看出它最终会在命令提示符打出”Hello, World! 114514”这个字符串和整数并且传输pause指令给命令提示符,让其暂停运行并显示“按任意键继续”的提示。
提示:在编译时候记得加上-static给CMAKE_EXE_LINKER_FLAGS,这样才可以让编译出的可执行文件独立运行

入口点

当你将编译出的可执行文件拖入IDA的窗口之后,当IDA自动分析完成整个程序的互相调用,会给出一张十分复杂的调用图(如下图)。
IDA_MainGraph
你可能会很好奇为什么,只是一个简单的Hello,World程序而已为什么会存在这么多的调用,并没有在代码中体现出来哇?
放大其中任意一个代码块(如下图)你会发现,他们做的那么多事情,无非就是在准备运行现场,错误处理等现代编程语言自带的功能,在现如今的编程中,这些以往繁琐的操作,都将会被自动处理。
IDA_AnyPreFunc

准备运行现场

main

总结

(暂未完结)

知识共享许可协议
本作品及其附属数据均采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

添加新评论