首页
社区
课程
招聘
[求助]想在程序中直接执行一段指令
发表于: 2007-5-23 06:40 4889

[求助]想在程序中直接执行一段指令

2007-5-23 06:40
4889
int fun(char *src)
{
        printf("%s\n",src);
        return 1;
}

typedef int  (*FUN) ( char * );

char *code="\xE9\x01\x00\x00\x00\xCC\x55\x8B\xEC\x83\xEC\x40 \
                \x53\x56\x57\x8D\x7D\xC0\xB9\x10\x00\x00\x00\xB8\xCC \
                \xCC\xCC\xCC\xF3\xAB\x8B\x45\x08\x50\x68\x7C\x0F\x42 \
                \x00\xE8\x2A\x00\x00\x00\x83\xC4\x08\xB8\x01\x00\x00 \
                \x00\x5F\x5E\x5B\x83\xC4\x40\x3B\xEC\xE8\x95\x00\x00 \
                \x00\x8B\xE5\x5D\xC3";

int main(int argc, char* argv[])
{
        FUN fp;
        void *funsp=NULL;

        funsp=(void*)code;
        fp=(FUN)funsp;       
        fp("test");
        return 0;
}

其中code 是通过winhex找到的fun()函数的hex数据。但是以上执行失败。所以请问:
1,这样的方法是否可行?
2,如果可行,我不能成功的问题是在那里?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
顶上来,大家帮忙看看吧,先谢了~~
2007-5-23 12:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
1 这样是可以的,这和写静态函数调用区别不大
2 编译器编译的时候*code分配到.text段,不可执行,程序肯定报错,可以试写段空函数,把*code硬拷贝过去,可以执行
在单位,没测试过,你自己试试看
2007-5-23 13:37
0
雪    币: 214
活跃值: (40)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
应该是在code里无法定位printf(),在32寻址里call XXXXXX一般会被编译成E8 YYYYYYYY 的形式,其中YYYYYYYY是相对于call的下一条指令地址的偏移量,如果call指令地址变了,这个偏移量也应该随之变化

还有就是如楼上据说没有可执行属性,用memcpy先把它拷到局部变量应该就可以了
2007-5-23 14:25
0
雪    币: 210
活跃值: (10)
能力值: ( 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重定位问题了.....希望有经验的说说...
2007-5-23 15:03
0
雪    币: 12
活跃值: (610)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
嘿嘿~
http://hi.baidu.com/robinh00d/blog/item/7f5bf80383b0d088d53f7cff.html
2007-5-23 15:40
0
游客
登录 | 注册 方可回帖
返回
//