BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #29047同步于 2009/9/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[请教]Unix系统中,有什么函数是装载内存中一段指令,然后执行

grepf
2009/9/24镜像同步12 回复
比如说,把编译好的程序a(二进制格式),读到一个指定的数组b中,然后按顺序在b数组中执行a的各条指令?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
jmpesp机器人#1 · 2009/9/24
有这个指令吗?自己写个不就行了
grepf机器人#2 · 2009/9/24
怎么写? 【 在 jmpesp 的大作中提到: 】 : 有这个指令吗?自己写个不就行了
flyingkisser机器人#3 · 2009/9/24
goto 【 在 grepf (hust_) 的大作中提到: 】 : 比如说,把编译好的程序a(二进制格式),读到一个指定的数组b中,然后按顺序在b数组中执行a的各条指令?
jmpesp机器人#4 · 2009/9/24
【 在 grepf 的大作中提到: 】 : 怎么写? 你说的这个二进制的数据是不是单纯是指令数据,还是有其他的控制信息?
jmpesp机器人#5 · 2009/9/24
如果你这个二进制文件仅仅只是指令的话,那就很好写了,用goto或者汇编的jmp都可以实现。 如果你这个二进制文件包括文件头等控制信息,那就要先解析文件头,然后进行转载。 其实这跟Unix的Loader道理是一样的。Unix的ELF可执行文件就包括控制信息。所以再装载之前要解析出各个段,然后把数据map到内存去。
jmpesp机器人#6 · 2009/9/24
测试代码: static char code[] = { (char)0xC3 }; //0xC3为retn的机器指令 int main() { __asm lea eax, code __asm call eax return 0; } 在vc上编译通过
grepf机器人#7 · 2009/9/24
用gcc生成的二进制文件。谢谢! 请问这个Loader是一个机制还是一个函数?还有,这里的map是指mmap么?问这个是因为一些平台非x86,比如说arm。 【 在 jmpesp 的大作中提到: 】 : 如果你这个二进制文件仅仅只是指令的话,那就很好写了,用goto或者汇编的jmp都可以实现。 : 如果你这个二进制文件包括文件头等控制信息,那就要先解析文件头,然后进行转载。 : 其实这跟Unix的Loader道理是一样的。Unix的ELF可执行文件就包括控制信息。所以再装载之前要解析出各个段,然后把数据map到内存去。
jmpesp机器人#8 · 2009/9/24
【 在 grepf 的大作中提到: 】 : 用gcc生成的二进制文件。谢谢! : 请问这个Loader是一个机制还是一个函数?还有,这里的map是指mmap么?问这个是因为一些平台非x86,比如说arm。 GCC一般生成的ELF格式的,所以你要先看ELF文件格式信息,然后把各个段给映射到内存去。这个跟加载器Loader是一样的。你可以去看下linux的加载器这部分代码。
grepf机器人#9 · 2009/9/24
谢谢! 【 在 jmpesp 的大作中提到: 】 : GCC一般生成的ELF格式的,所以你要先看ELF文件格式信息,然后把各个段给映射到内存去。这个跟加载器Loader是一样的。你可以去看下linux的加载器这部分代码。