我一直在摆弄函数指针,我有两个具体的功能,我打印到控制台;结果说他们是8个字节APPART,就像这样:添加到函数指针,获取指向另一个函数的指针?
Function Pointer Addresses:
rb_gc_start addr: 0x6ea81360
rb_gc_mark addr: 0x6ea81368
难道我只是得到一个函数指针第一,增加8到指针,并有一个指针第二个函数?
Backstory:在Ruby的源文件中有两个函数,rb_gc_start
和rb_gc_mark
;我正在为一个困难的计划建立一个图书馆。该程序嵌入了Ruby,但不嵌入Ruby C API(它禁止加载Ruby扩展或* .so文件)。我几乎重新创建了环境,并且我可以直接获取rb_gc_start
的地址,但rb_gc_mark
并不那么容易被公开,我需要一个指向它的指针才能正常工作。
例如:
unsigned long (*rb_gc_start)(void);
void (*rb_gc_mark)(unsigned long);
void my_method(void) {
rb_gc_start = get_method(rb_mGC, "start"); // 0x6ea81360;
rb_gc_mark = rb_gc_start + 8; // Does this work?
}
我最有可能看这里的傻瓜,但获得的第二个功能是最有帮助的任何帮助。
'func1_ptr'从哪里来? – bwinata 2014-11-21 05:01:27
对不起,我在最后一分钟重新命名了这些函数以提供更多的上下文;它应该是'rb_gc_start'。 – FenixFyreX 2014-11-21 05:03:30