Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.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
Macos 如何在NASM中创建Mach-O符号别名?_Macos_Nasm_Symbols_Mach O - Fatal编程技术网

Macos 如何在NASM中创建Mach-O符号别名?

Macos 如何在NASM中创建Mach-O符号别名?,macos,nasm,symbols,mach-o,Macos,Nasm,Symbols,Mach O,我有一个导出两个函数的程序集文件。函数名为NASM\u RDRAND\u GenerateBlock和NASM\u RDSEED\u GenerateBlock。这些符号缺少前导下划线装饰。该文件由NASM组装而成 在C/C++代码中,符号名声明为extern“C”,以避免损坏。在Linux和Cygwin下的链接工作正常。在OS X下链接失败,原因是: ... Undefined symbols for architecture x86_64: "_NASM_RDRAND_GenerateB

我有一个导出两个函数的程序集文件。函数名为
NASM\u RDRAND\u GenerateBlock
NASM\u RDSEED\u GenerateBlock
。这些符号缺少前导下划线装饰。该文件由NASM组装而成

在C/C++代码中,符号名声明为
extern“C”
,以避免损坏。在Linux和Cygwin下的链接工作正常。在OS X下链接失败,原因是:

...
Undefined symbols for architecture x86_64:
  "_NASM_RDRAND_GenerateBlock", referenced from:
      RDRAND::GenerateBlock(unsigned char*, unsigned long) in libcryptopp.a(rdrand.o)
  "_NASM_RDSEED_GenerateBlock", referenced from:
      RDSEED::GenerateBlock(unsigned char*, unsigned long) in libcryptopp.a(rdrand.o)
ld: symbol(s) not found for architecture x86_64
我想创建一个别名,这样苹果的链接器就可以链接到这个符号了。微软的,但我不确定苹果和Mach-O是否有类似的设施

我的第一个问题是,Mach-O文件格式是否支持符号别名

如果是这样,那么我的第二个问题是,如何告诉NASM创建别名?或者我需要在NASM中做什么来创建符号别名


以下是用于生成对象文件的命令:

nasm-f macho32 rdrand.S-DX86-g-o rdrand-x86.o
nasm-f macho64 rdrand.S-DX64-g-o rdrand-x64.o

以下是
macOS
中的.

,您可以使用类型
N\u INDR
来别名另一个符号

从/System/Library/Frameworks/Kernel.framework/Versions/A/Headers/mach-o/nlist.h:

如果类型为N_INDR,则符号定义为相同 作为另一个象征。在这种情况下,n_值字段是到的索引 另一个符号名称的字符串表。当另一个符号 然后它们都接受定义的类型和值

还有一个工具
indr
,您可以编译它,在使用汇编时可能会有所帮助:


将用于编译程序集文件的nasm命令行添加到问题中。另外,您也在OSX上重新编译C/C++文件?您可能需要在NASM上使用
--prefix
命令选项。