能力值:
( LV2,RANK:10 )
|
-
-
2 楼
顶上来,大家帮忙看看吧,先谢了~~
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
1 这样是可以的,这和写静态函数调用区别不大
2 编译器编译的时候*code分配到.text段,不可执行,程序肯定报错,可以试写段空函数,把*code硬拷贝过去,可以执行
在单位,没测试过,你自己试试看
|
能力值:
( LV6,RANK:90 )
|
-
-
4 楼
应该是在code里无法定位printf(),在32寻址里call XXXXXX一般会被编译成E8 YYYYYYYY 的形式,其中YYYYYYYY是相对于call的下一条指令地址的偏移量,如果call指令地址变了,这个偏移量也应该随之变化
还有就是如楼上据说没有可执行属性,用memcpy先把它拷到局部变量应该就可以了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
谢谢楼上的两位。
int fun(char *src)
{
return 101;
}
typedef int (*FUN) ( char * );
char *code="\x55\x8B\xEC\x83\xEC\x40\x53\x56\x57\x8D\x7D\xC0\xB9\x10\x00\x00\x00\xB8\xCC\xCC\xCC\xCC\xF3\xAB\xB8\x65\x00\x00\x00\x5F\x5E\x5B\x8B\xE5\x5D\xC3";
int fun1(void *str)
{
char s[128]={0};
FUN f=NULL;
memcpy(s,(char*)str,128);
f=(FUN)(void*)s;
return f("haha");
}
int main(int argc, char* argv[])
{
printf("return %d\n",fun1(code));
return 0;
}
打印出101结果。所以正确。
目前要继续处理的就是调用API重定位问题了.....希望有经验的说说...
|
能力值:
( LV6,RANK:90 )
|
-
-
6 楼
嘿嘿~
http://hi.baidu.com/robinh00d/blog/item/7f5bf80383b0d088d53f7cff.html
|
|
|