- 论坛徽章:
- 0
|
回复 kallytin
我58楼不是说了吗
我再详细点也行
当程序带参数执行 在进入到asnfun汇编代 ...
land5280 发表于 2010-08-17 23:49 ![]()
楼上,我已按照你的方法去试拉,但还是不行阿。详细如下:
----------------------------------------------------
程序: test_en.asm
extern main
extern exit
bits 32
[SECTION .data]
addr_argv dd 0
addr_argc dd 0
[SECTION .bss]
[section .text]
global _start
global addr_argv
global addr_argc
_start:
;argc
mov eax, dword[esp+4]
mov dword[addr_argc], eax
;argv
mov eax, dword[esp+8]
mov dword[addr_argv], eax
call main
;call exit
----------------------------------------------------
----------------------------------------------------
程序: test.c
#include <stdio.h>
extern int addr_argv;
extern int addr_argc;
int main(int argc, char *argv[])
{
char *p = (char*)*(int*)addr_argv; // &argv[0]
int c = *(int*)addr_argc; // argc
//printf("hello world::%d,%s,%s\n",argc, argv[0],argv[1]);
printf("hello world::%d,%s,%s\n",c, *(p+0),*(p+1));
return 1;
}
----------------------------------------------------
compile命令 :
gcc -c test.c -o test.o
nasm -f elf test_en.asm -o test_en.o
ld test.o test_en.o -o test -lc -dynamic-linker /lib/ld-linux.so.2
结果:
Segmentation fault
......... |
|