Учитывая только доступ к автономной программе ELF, я хочу иметь возможность вызывать функцию в программе из моей собственной программы. Допустим, приведенный ниже код: main.c
#include <stdio.h>
extern int mystery(int a,int b);
int main() {
int a = 0;
int b = 1;
printf("mystery(a,b) = %d\n",mystery(a,b));
return 0;
}
Функция mystery
существует в некотором файле эльфа not_my_program
. Я пытаюсь сделать что-то вроде
gcc main.c not_my_program
Однако это дает мне неопределенную ошибку ссылки на mystery
. Я искал методы на форумах и обнаружил, что преобразование этого файла elf в общий объектный файл невозможно. Я также изучил компиляцию main.c
в перемещаемый объектный файл с
gcc -c main.c
, а затем с помощью ld
связал эльфа с main.o
, но я не мог понять, как это сделать. Эльф 32-битный, но я опустил флаг -m32
. Если флаг отличается для ld
, пожалуйста, дайте мне знать. Любая помощь будет принята с благодарностью.
edit: вывод readelf -h not_my_program
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: DYN (Shared object file)
Machine: Intel 80386
Version: 0x1
Entry point address: 0x10e0
Start of program headers: 52 (bytes into file)
Start of section headers: 15116 (bytes into file)
Flags: 0x0
Size of this header: 52 (bytes)
Size of program headers: 32 (bytes)
Number of program headers: 11
Size of section headers: 40 (bytes)
Number of section headers: 30
Section header string table index: 29