Ich schrieb diesen Code für die Anruffunktion von dort Adresse:Anruffunktion von Adresse in Command
$ cat main.c
#include <stdlib.h>
#include <stdio.h>
int test(){
printf("%s\n","[*] i'm in test");
return 1;
}
int main(int argc,char **argv){
int (*m)();
m=&test;
printf("[*] test func addr is: %p\n", m);
(*m)();
return 0;
}
$ gcc -o main main.c
$ ./main
[*] test func addr is: 0x8048414
[*] i'm in test
$
kein Problem
aber ich Funktion will laufen und dort von argv
in Kommandozeilen-Adresse übergeben ..
zum Beispiel, wenn die Adresse der Funktion test()
0x222222
ist, möchte ich nach dem Programm mit diesem Befehlausführen, test()
Funktion laufen ..
mein Code:
$ cat main.c
#include <stdlib.h>
#include <stdio.h>
int test(){
printf("%s\n","[*] i'm in test");
return 1;
}
int main(int argc,char **argv){
int (*m)();
long conv ;
int num;
num=conv=strtol(argv[1],NULL,10);
printf("[*] argv[1] is: %d\n", num);
m=&test;
printf("[*] test func addr is: %p\n", m);
m=num;
(*m)();
return 0;
}
$ gcc -o main main.c
main.c: In function ‘main’:
main.c:17:3: warning: assignment makes pointer from integer without a cast [enabled by default]
$ ./main 8048444
[*] argv[1] is: 8048444
[*] test func addr is: 0x8048444
Segmentation fault (core dumped)
$
aber nicht laufen!
Es ist '8048444' in Hex. Sie analysieren es als Dezimalzahl. Und sonst ist es ein schrecklicher Hack. –