我一直在擺弄函數指針,我有兩個具體的功能,我打印到控制檯;結果說他們是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