c - ollydbg 中有许多“printf”,但 a.exe 中只有一个“printf”
问题描述
这是简洁的c代码:
#include <stdio.h>
int main()
{
printf("abcdefg\n");
return 0;
}
当我用ollydbg打开它,然后输入E(可执行模块),右键单击a模块并选择“查看可执行文件”。它将显示以下窗口:
但是,当我 ctrl + B 搜索“printf”时,我得到了三个结果(ctrl + L 会找到下一个)
我的问题是:
- 在我的代码中只有一个'printf'函数,为什么我可以在ollydbg中找到3个'printf'。
解决方案
我的猜测是,当您包含它时,stdio.h
它必须包含更多出现的printf
字符串,编译的源代码不仅是您的源代码,而且是您包含的所有内容。
我不认为函数的名称应该包含在二进制文件中(但我不是专家),我认为它们存在的唯一原因是您使用调试选项编译它。您可以通过在不打开调试器的情况下编译二进制文件并使用一些十六进制编辑器检查可执行文件来轻松检查它。
我建议研究编译器是如何工作的?. 我发送的链接可能是开始和学习的好地方。
推荐阅读
- python - 带有布尔字段的 filter_queryset
- cmake - CMake生成的Xcode项目如何生成通用dSYM
- regex - Python:正则表达式在 Windows 中匹配,但在 Linux 4.4.59+ 中不匹配
- regex - 正则表达式过滤和排除禁用词
- python-3.x - Python print() 会长期破坏 CMD 吗?
- java - 有没有办法使用注解来构建一个java类,基于多个java类的属性?
- java - 尝试使用枚举作为与 thymeleaf 一起使用的输入
- vb.net - vb.net 纠正错误实现 System.IDisposable
- reactjs - 在生产构建中出现此错误,但在开发中没有出现......不知道如何追踪它
- r - 有看起来像空间的符号,但它不是空间。如何删除它?