首页 > 解决方案 > ollydbg 中有许多“printf”,但 a.exe 中只有一个“printf”

问题描述

这是简洁的c代码:

#include <stdio.h>
int main()
{
    printf("abcdefg\n");
    return 0;
}

当我用ollydbg打开它,然后输入E(可执行模块),右键单击a模块并选择“查看可执行文件”。它将显示以下窗口: 在此处输入图像描述

但是,当我 ctrl + B 搜索“printf”时,我得到了三个结果(ctrl + L 会找到下一个)

我的问题是:

标签: csystemollydbg

解决方案


我的猜测是,当您包含它时,stdio.h它必须包含更多出现的printf字符串,编译的源代码不仅是您的源代码,而且是您包含的所有内容。

我不认为函数的名称应该包含在二进制文件中(但我不是专家),我认为它们存在的唯一原因是您使用调试选项编译它。您可以通过在不打开调试器的情况下编译二进制文件并使用一些十六进制编辑器检查可执行文件来轻松检查它。

我建议研究编译器是如何工作的?. 我发送的链接可能是开始和学习的好地方。


推荐阅读