Я играл с указателями функций, и у меня есть две конкретные версии, которые я напечатал на консоли; результаты говорят, что они являются 8 байт аппарт, например, так:Добавить в функцию указатель, чтобы получить указатель на другую функцию?
Function Pointer Addresses:
rb_gc_start addr: 0x6ea81360
rb_gc_mark addr: 0x6ea81368
Могу ли я просто получить указатель на функцию к первому, добавить 8 к этому указателю, и есть указатель на второй функции?
Предыстория: в источнике Руби есть две функции: rb_gc_start
и rb_gc_mark
; Я строю библиотеку для ... сложной программы. Эта программа включает Ruby, но не API Ruby C (он отключает загрузку 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
Извините, я переименовал функции в последнюю минуту, чтобы предоставить больше контекста; это должно быть 'rb_gc_start'. – FenixFyreX