【问题标题】:Calling C function in library from assembly code从汇编代码调用库中的 C 函数
【发布时间】: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?

【问题讨论】:

  • 图书馆: / / ...
  • 功能:等待,ptrace,...
  • 您可以将信息编辑到您的问题中,无需在cmets中添加。
  • 哦,好的,我明白了。你在&lt;&gt; 中有文本,但它没有被标记为代码。为您重新格式化。

标签: c assembly nasm


【解决方案1】:

通常有两种方法可以从汇编程序中使用 C/或任何其他 HLL 函数:

  1. 静态链接 - 如果您使用链接器,您可以将您的程序与所需的 HLL 生成的 .obj 或 .lib 文件和

  2. 链接在一起
  3. 动态链接 - 您的程序在加载期间链接到所需的函数,而不是在编译期间。有两种可能的实现方式:

    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

【讨论】:

  • Linux uselib 系统调用用于“旧的a.out”可执行格式——Linux 在采用 ELF 之前使用的格式。每个人都应该在至少 15 年前停止使用它。
  • @WumpusQ.Wumbley - 好吧,它在某些系统上仍然可用,但恕我直言,使用起来很痛苦。 :)
猜你喜欢
  • 2011-09-04
  • 2016-09-07
  • 2017-02-18
  • 2012-04-21
  • 2016-06-01
  • 2016-08-27
  • 2013-03-13
  • 2020-06-06
  • 1970-01-01
相关资源
最近更新 更多