Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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
C++ 延迟符号的dlopen解析_C++_C_Macos_Dlopen_Dyld - Fatal编程技术网

C++ 延迟符号的dlopen解析

C++ 延迟符号的dlopen解析,c++,c,macos,dlopen,dyld,C++,C,Macos,Dlopen,Dyld,我想通过使用mmap分配可执行区域来存储我的动态库可执行代码,从而编写一个模拟dlopen功能的工具 然后,它必须通过查找符号表来定位符号地址。 它似乎工作得很好,因为我只需要找到API符号地址(分配的库的起始地址的偏移量+该库中符号的偏移量)。。对库中其他函数的间接调用是正确的,因为操作码调用使用相对地址 但是,在具有读写权限的\u数据段的\u la\u symbol\u ptr部分中定义了一些特殊符号。 看起来dlopen应该将实现放在运行时(请参阅下面从hopper reverser工具获

我想通过使用
mmap
分配可执行区域来存储我的动态库可执行代码,从而编写一个模拟dlopen功能的工具

然后,它必须通过查找符号表来定位符号地址。 它似乎工作得很好,因为我只需要找到API符号地址(分配的库的起始地址的偏移量+该库中符号的偏移量)。。对库中其他函数的间接调用是正确的,因为操作码调用使用相对地址

但是,在具有读写权限的
\u数据
段的
\u la\u symbol\u ptr
部分中定义了一些特殊符号。 看起来dlopen应该将实现放在运行时(请参阅下面从hopper reverser工具获取的空存根)

我想知道在运行时加载这个符号的动机是什么。链接器从何处获取实现,谁在更改实现的位置,dlopen还是dyld(我的可执行文件中的代码)


那么关于C还是C++的问题呢?他们不是同一种语言。”坦布尔,我的实验实际上是在C中,但我也试图理解C++的情况。
    ; Section __la_symbol_ptr
    ; Range: [0x1010; 0x1018[ (8 bytes)
    ; File offset : [4112; 4120[ (8 bytes)
    ; Flags: 0x7
    ;   S_LAZY_SYMBOL_POINTERS

                 _printf_ptr:
0000000000001010         dq         _printf                                     ; DATA XREF=imp___stubs__printf
0000000000001018         db  0x00 ; '.'
0000000000001019         db  0x00 ; '.'
000000000000101a         db  0x00 ; '.'
000000000000101b         db  0x00 ; '.'
000000000000101c         db  0x00 ; '.'
000000000000101d         db  0x00 ; '.'
000000000000101e         db  0x00 ; '.'
000000000000101f         db  0x00 ; '.'
0000000000001020         db  0x00 ; '.'
...
..
.