当前位置: 技术问答>linux和unix
这段代码应该怎么去理解?
来源: 互联网 发布时间:2016-04-15
本文导语: int do_go (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[]) { ulong addr, rc; printf("hello"); return 0; if (argc usage); return 1; } addr = simple_strtoul(argv[1], NULL, 16); printf ("## Starting application at 0x%08lx ...n", addr); /* * p...
int do_go (cmd_tbl_t *cmdtp, bd_t *bd, int flag, int argc, char *argv[])
{
ulong addr, rc;
printf("hello");
return 0;
if (argc usage);
return 1;
}
addr = simple_strtoul(argv[1], NULL, 16);
printf ("## Starting application at 0x%08lx ...n", addr);
/*
* pass address parameter as argv[0] (aka command name),
* and all remaining args
*/
rc = ((ulong (*)(bd_t *, int, char *[]))addr) (bd, --argc, &argv[1]);
printf ("## Application terminated, rc = 0x%lxn", rc);
return 0;
}
这段代码是用来运行某地址内的二进制代码
具体调用时用命令 go 0x********
其中rc = ((ulong (*)(bd_t *, int, char *[]))addr) (bd, --argc, &argv[1]);
应该怎么去理解?
|
就是你的地址addr指向的一块代码啊!那就是该函数的函数体!如果你反汇编可执行文件就清楚了!举个例子,在下面的反汇编代码中:
[code=INIFile]
08048504 :
8048504: 55 push %ebp
8048505: 89 e5 mov %esp,%ebp
8048507: b8 00 00 00 00 mov $0x0,%eax
804850c: 5d pop %ebp
804850d: c3 ret
[/code]
func函数的c语言定义如下:
int func (int argc)
{
return 0;
}
那么我用如下的代码就是调用该位置的函数func:
ulong addr;
addr = 8048504;
(int(*)(int)addr)(0x0f);
类似:
((ulong (*)(bd_t *, int, char *[]))addr) (bd, --argc, &argv[1])就是调用addr地址开始的代码段,而该代码段其实就是一个定义为:
ulong func(bd_t * bd, int argc, char *argv[])的函数;
仅仅是我的理解,可能有些出入!高手拍砖!