位置无关的代码调用printf-assembly

时间:2012-07-23 15:15:59

标签: assembly

  call printf 

可用于位置独立代码吗? 一方面,调用是相对的,另一方面printf是库函数。 如果答案不是,为什么?在链接阶段,printf的代码没有复制到我写的文件中? (然而在我看来好吧)。

1 个答案:

答案 0 :(得分:1)

您可以使用GOT进行相对FAR调用(模块间调用),这将保留绝对地址printf,然后调用printf,可以执行某些操作像CALL [GOT + printf_index * sizeof(ptr)]一样(在汇编/编译期间,这个表达式将向下折叠为常量)。

另一种但非常糟糕的方法是将你正在使用的CRT函数合并到你的共享库/二进制文件中(MSVC调用这个静态链接),但是这个膨胀是二进制文件并且使它非常友好,因此对CRT中可能未被发现的错误开放,这些错误与静态链接。