从汇编代码调用库中的 C 函数
Posted
技术标签:
【中文标题】从汇编代码调用库中的 C 函数【英文标题】:Calling C function in library from assembly code 【发布时间】:2013-07-18 16:18:49 【问题描述】:我需要在我的 nasm 程序中调用不同 C 库中的一些函数。
图书馆:
<sys/ptrace.h>
<sys/wait.h>
... 以及 ptrace、execl、wait 等函数。
How to use c library function fgets in assembly language?
【问题讨论】:
图书馆:<>
中有文本,但它没有被标记为代码。为您重新格式化。
How do I use C libraries in assembler?的可能重复
【参考方案1】:
通常有两种方法可以从汇编程序中使用 C/或任何其他 HLL 函数:
静态链接 - 如果您使用链接器,您可以将您的程序与所需的 HLL 生成的 .obj 或 .lib 文件和
链接在一起动态链接 - 您的程序在加载期间链接到所需的函数,而不是在编译期间。有两种可能的实现方式:
2.1。手动加载动态库并获取所需函数的地址。为此,您必须使用操作系统提供的服务。例如在 Linux 中,这是 sys_uselib(已经过时了),或者自己加载库并解析 ELF 文件以获取函数地址;
2.2。构建包含要使用的库和函数列表的导入表。然后操作系统加载器会自动在占位符变量中提供函数的地址,您可以从中间接调用它们。
所有这些方法都高度依赖于操作系统和汇编程序,所以我只能为汇编程序提供示例I use:
Import macros 用于为 Linux 构建导入表的 FreshLib。
The same for Windows
Example of use for the library "libc.so" in Linux
Example of use for the library "user32.dll" in Windows
【讨论】:
Linuxuselib
系统调用用于“旧的a.out
”可执行格式——Linux 在采用 ELF 之前使用的格式。每个人都应该在至少 15 年前停止使用它。
@WumpusQ.Wumbley - 好吧,它在某些系统上仍然可用,但恕我直言,使用起来很痛苦。 :)以上是关于从汇编代码调用库中的 C 函数的主要内容,如果未能解决你的问题,请参考以下文章