【问题标题】: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
相关资源
最近更新 更多