我想把一些汇编代码存储到一个内存地址怎么实现?

shier2817 2014-12-20 10:56:03
如题,首先我是在其他语言内嵌汇编的,我现在可以申请一块内存空间,我想把一些汇编代码(数据、常量、函数即子程序)存放到这个空间(准确说存放的应该是字节码吧);
并且我需要知道存储的偏移哦(这个要是存储用到的数据或者常量比较好说,因为自己对自己的数据大小自然知道。但是要是存储一段子程序,我怎么算它的偏移?特别是子程序1、子程序2……,第一个好说,随后的话就不知道咋办了);
如果知道了偏移,通过我申请的内存指针,加上偏移就可以随时取需要的数据,并且可以jmp到指定的子程序地址调用了吧。。

所以请教前辈2个问题:
1、怎么把汇编数据写到指定内存(我是指通过汇编代码写另外的代码到内存中哦);
2、怎么算子程序的偏移?

多谢指教!
...全文
979 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fhqdx0012 2014-12-21
  • 打赏
  • 举报
回复
自行搜索各语言的shellcode相关资料 你的问题过于笼统
「已注销」 2014-12-21
  • 打赏
  • 举报
回复
分散了吧,这个问题我貌似有想法了。。。再开个帖子问别的事儿。。。
「已注销」 2014-12-21
  • 打赏
  • 举报
回复
引用 1 楼 fhqdx0012 的回复:
自行搜索各语言的shellcode相关资料 你的问题过于笼统
貌似是我没表述清楚,我不是要啥shellcode(其实我对这个技术的定义还不是很清晰,但我觉得是类似把一段可执行代码或数据注入到另外的程序中的); 可我的需求不是这样,我是在一个叫“易语言”的编程语言中使用内嵌汇编,他本身就支持的,但是默认支持是仅仅是汇编的字节码(而不是我们写MASM时候的指令,这个字节码实际就是一个汇编的子程序proc),我已经写过很多内嵌汇编的小功能了。。现在有个以前没有写过的想法是: 1、首先我得说一些实现实际功能的proc我都会写,也可以得到他们的字节码; 2、我还要说清楚我其实就是像该进程内部的堆内存存入数据哦,不是另外的程序,而是在当前程序的源代码中内嵌汇编; 3、参数传递进来一个内存区域的指针,其实最笨的办法是:我先把第一条提到的所需要的字节码生成好,这样不但知道了向内存拷贝的数据,连长度也已知了,比如:mov eax, 01h,字节码为(B8 01 00 00 00),长度5,我直接将这个数据movsb或stosb到内存中即可,就像#2提到的那样,这个我会,要是这样的话就没提问的意义了; 4、而我是想请教,可以不可这样:

;一些辅助用汇编代码
……
;这是要复制到目标的代码:
mov eax, 01h               ;就拿前面提到的这句做例子
;另一些辅助用汇编代码
……
我的意思就是,我能否通过前后这些辅助工作的代码,比如this、offset伪指令什么的,将“mov eax, 01h” 这句的目标代码的指针找出来,同时我还可以得到指令的长度(5),然后向参数给出的内存指针拷贝数据,拷贝过去之后,就是:B8 01 00 00 00 我觉得应该可行,就是不知道具体该怎么实现。。。因为这样写出来的asm文件我保存起来,以后想找这段内嵌汇编的作用或者对其修改升级的时候都很直观,甚至通过again伪指令啥的我是不是也可以让每段目标字节码进行字节对齐,这样跳转执行的效率也比较好。。。
qnapjiujiu 2014-12-21
  • 打赏
  • 举报
回复
用rep movsb指令可以实现的,具体用法你可以查看一下相关资料
竹影半墙 2014-12-21
  • 打赏
  • 举报
回复
《汇编语言》 -- 王爽
「已注销」 2014-12-21
  • 打赏
  • 举报
回复
我好像查到一些资料了。。我这个需求其实叫汇编中的代码重定位。。。貌似我找到的资料里说,有些病毒是这种技术来定位代码的偏移的。。。晕,可我是正常需求不是开发病毒哦。。我只是把我需要的数据和函数写到自己开发的程序内部的一段申请好的地址空间里。。。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧