Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 问题-kextload链接(使用.a文件链接)_Xcode_Macos_Kernel_Static Libraries_Nasm - Fatal编程技术网

Xcode 问题-kextload链接(使用.a文件链接)

Xcode 问题-kextload链接(使用.a文件链接),xcode,macos,kernel,static-libraries,nasm,Xcode,Macos,Kernel,Static Libraries,Nasm,我有一个汇编文件,需要使用Xcode与内核驱动程序链接。 为了实现这一点,我使用'ar rc'命令生成一个.a文件,并将其添加到我的Xcode项目@linkbinary with libraries中。建造成功了。我在那里有一个名为f的全局函数(在我的汇编文件中),我从一个cpp文件调用它,该文件具有该函数的前向声明 // bar.cpp void f(); ... f(); 函数的定义位于前面提到的asm文件中: global _f _f: ... ret 当我尝试使用“kextload”

我有一个汇编文件,需要使用Xcode与内核驱动程序链接。 为了实现这一点,我使用'ar rc'命令生成一个.a文件,并将其添加到我的Xcode项目@linkbinary with libraries中。建造成功了。我在那里有一个名为f的全局函数(在我的汇编文件中),我从一个cpp文件调用它,该文件具有该函数的前向声明

// bar.cpp
void f();
...
f();
函数的定义位于前面提到的asm文件中:

global _f
_f:
...
ret
当我尝试使用“kextload”执行kext时,我收到以下错误:

(kernel) kxld[com.apple.dts.driver.SimpleDriver]: The following symbols are unresolved for this kext:
(kernel) kxld[com.apple.dts.driver.SimpleDriver]:   __Z9fy <---- that is probably the function f
(kernel) Can't load kext com.apple.dts.driver.SimpleDriver - link failed.
(kernel) Failed to load executable for kext com.apple.dts.driver.SimpleDriver.
(kernel) Kext com.apple.dts.driver.SimpleDriver failed to load (0xdc008016).
(kernel) Failed to load kext com.apple.dts.driver.SimpleDriver (error 0xdc008016).
Failed to load SimpleDriver.kext - (libkern/kext) link error.
  • “somefunction”一词用于对问题不重要的函数-
如您所见,f函数在这里,并标有“T”,这意味着它是一个全局函数。但是kextload似乎仍然无法解决它。

这是由于,这导致名称
f
变成
\uuu Z9fy
。您有两种选择之一:

< Prefix > C++声明与代码>外部“C”<代码> <
  • 将装配功能命名为
    \uuuz9fy

  • 第一个选项几乎总是首选的路由,因为它更跨平台(它不依赖C++名称的细节),并且保持符号名称“干净”。

    >是真的,但是,鉴于他正在尝试构建KEXT,跨平台可能不符合他的兴趣。
    ..
    00000000000002e9 t somefunction
    0000000000000119 t somefunction
    0000000000000242 t somefunction
    0000000000000293 T f
    0000000000000006 t somefunction
    00000000000003cf t somefunction
    ..