【发布时间】:2013-07-12 20:33:53
【问题描述】:
我想要实现的目标
在编译的时候,编译器就知道函数调用是 有效,因为您包含了 iostream 头文件,但因为 函数不是 cpp 文件的一部分,编译器只留下一个 存根 在呼叫站点。链接器通过目标文件,并为 每个存根,它找到正确的函数地址并替换存根 来自其他目标文件之一的正确地址是 链接。 作者:ALEX ALLAN,跳到 C++
在“存根”上面,我想在真实的目标文件中看到。
我做了如下,
代码 //main.cpp
#include "f.h"
using namespace std;
int main()
{
myfunc();
return 0;
}
//f.cpp
#include "f.h"
void myfunc()
{
}
//f.h
#ifndef F_H_INCLUDED
#define F_H_INCLUDED
void myfunc();
#endif // F_H_INCLUDED
3 个以上在单独的文件中。
我在 main.o 上使用的 objdump 命令
C:\Users\User\Downloads\binutils-2.22-1-mingw32-bin.tar\binutils-2.22-1-mingw32-
bin\bin>objdump.exe -S -C C:\Users\User\Documents\myC++\testFuncstabs\obj\Debug\
main.o
但是现在我一直在为 myFunc 在这个输出中寻找“存根”?
有人可以帮我吗?或者建议我另一种策略来实现这个目标?
【问题讨论】:
-
存根似乎是连续的三个
call语句,它们只是相互调用。不知道它是如何工作的。 -
这实际上是 x86 指令编码的结果 - 在最终的可执行文件中,它们被重定向到其他位置(即其他功能)。
标签: c++ assembly compiler-construction linker