【汇编语言】汇编中怎么嵌入、运行机器码? 20
RT。我把一段汇编代码(比如是helloworld)转成了机器码,就是b83412这样类型的,还有n多,我想把这段机器码嵌入到汇编源码中,然后想办法调用。就是说,我想在汇...
RT。我把一段汇编代码(比如是hello world)转成了机器码,就是b8 34 12 这样类型的,还有n多,我想把这段机器码嵌入到汇编源码中,然后想办法调用。
就是说,我想在汇编代码中嵌入我的机器码。打开后能把我的插入的机器码运行起来。。就是这样。。。
其实我也觉得是有点无聊,但是这是为了我的一个猜想。。。
在java中都能调用机器码,在强大的汇编面前,还有这么多高手,应该能实现吧?帮帮我咯。。。 展开
就是说,我想在汇编代码中嵌入我的机器码。打开后能把我的插入的机器码运行起来。。就是这样。。。
其实我也觉得是有点无聊,但是这是为了我的一个猜想。。。
在java中都能调用机器码,在强大的汇编面前,还有这么多高手,应该能实现吧?帮帮我咯。。。 展开
4个回答
展开全部
是这样,b8 34 12这样的字节内容计算机既可以解释成数据也可以解释成代码,就看哪个段寄存器中,如果是保护模式,就看它是放在哪个段中。举个例子,8086CPU汇编当CS:IP指向某个被命名为codesg的段,你想让CPU执行你指定的机器码,就在这个段定义这些数据就成了。例如如下代码
assume cs:codesg,ds:data
data segment
db b8 34 12 ;你定义的数据,它被CPU理解为数据
data ends
codesg segment
begin:
db b8 34 12 ;这就是你要执行的机器码
mov ax,data
mov ds,ax
....... ;之后你要写的指令,当然也可以定义你要执行的机器码
codesg ends
end begin
懂了吧,像诸如db b8 34 12这样的数据,CPU如何理解它全看它被哪个段寄存器指向
assume cs:codesg,ds:data
data segment
db b8 34 12 ;你定义的数据,它被CPU理解为数据
data ends
codesg segment
begin:
db b8 34 12 ;这就是你要执行的机器码
mov ax,data
mov ds,ax
....... ;之后你要写的指令,当然也可以定义你要执行的机器码
codesg ends
end begin
懂了吧,像诸如db b8 34 12这样的数据,CPU如何理解它全看它被哪个段寄存器指向
追问
嗯。。谢谢了。。。不愧是大侠级别的人物。。。额。。
也就是说,我把我需要执行的机器码插入到:
.......
这里就可以了吗?
又或者是插入到:
;这就是你要执行的机器码
这句注释的前面?
插入的时候有没有什么特殊的格式,机器码要怎么排列?
呵呵,我是个菜鸟,但是我对汇编的确很感兴趣,如果我能弄明白这个问题,我一定以后好好学习汇编! Thanks
追答
cs是指向的codesg段,begin标号后的就是开始执行的代码,所以说你只要定义到begin之后任何一个地方都可以
展开全部
汇编语言和机器码,本来就是相辅相成的。
绝大多数的汇编语言程序,都嵌入了机器码。
用 DB 就可以把机器码嵌入到汇编语言程序中。
绝大多数的汇编语言程序,都嵌入了机器码。
用 DB 就可以把机器码嵌入到汇编语言程序中。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
码数据) - 系统核心支持库->其他
英文名称:MachineCode
在编译后文件代码段中当前语句位置置入指定的机器指令码数据。本命令为高级命令。
参数<1>的名称为“代码数据”,类型为“通用型(all)”。欲置入到代码段中的机器指令码数据,可以是字节集数据或二进制文件名文本。
操作系统需求: Windows、Linux
--------
使用“置入代码”都有什么步骤?一、写出汇编代码;二、通过汇编器将汇编代码编译为机器码;三、将机器码转换为易语言字节集常量数据,并作为参数传入“置入代码”。 第一步没什么好说的,是考验汇编功力的地方,是硬功夫,没有技巧的。 第二步,我们可以借助“Ollydbg”等汇编器完成(当然也可以通过查询Intel x86 指令手册,纯手工将汇编代码编译为机器指令码,除非变态或超级牛叉的人不会采用)。首先启动Ollydbg,打开任意一个EXE程序,在汇编代码区双击任意一行,在弹出的汇编窗口中,输入第一步写好的第一行汇编代码,回车,就可以在机器指令区域(汇编代码区域左侧)看到相应的机器指令了,如此循环,逐行输入所有汇编代码,就可以得到相应的机器指令代码了。 第三步也相对容易,主要工作可能就是将Ollydbg生成的16进制指令代码转换为10进制。如果代码不长,借助“计算器”纯手工操作也行。一般来说,通常会用易语言写一个小程序,解析从Ollydbg中复制出的文本,提取其中的机器指令代码,进行数制转换,生成易语言字节集数据的文本格式。这种小程序很容易写,我想“置入代码”的使用者中很多人(据我了解不下10个)都写过类似的程序,我(liigo)也写过一个。说实话,这种小程序自己用,写的简陋些没关系,反正只是辅助程序,还可以随时调整嘛,但想发布的话,就要考虑通用性易用性,麻烦很多,况且用户也不多,所以发布此类程序的人很少,但是论坛上也确实有人发过。 今天就写这么多。希望读者有所收获。
-------
你试试这个。
英文名称:MachineCode
在编译后文件代码段中当前语句位置置入指定的机器指令码数据。本命令为高级命令。
参数<1>的名称为“代码数据”,类型为“通用型(all)”。欲置入到代码段中的机器指令码数据,可以是字节集数据或二进制文件名文本。
操作系统需求: Windows、Linux
--------
使用“置入代码”都有什么步骤?一、写出汇编代码;二、通过汇编器将汇编代码编译为机器码;三、将机器码转换为易语言字节集常量数据,并作为参数传入“置入代码”。 第一步没什么好说的,是考验汇编功力的地方,是硬功夫,没有技巧的。 第二步,我们可以借助“Ollydbg”等汇编器完成(当然也可以通过查询Intel x86 指令手册,纯手工将汇编代码编译为机器指令码,除非变态或超级牛叉的人不会采用)。首先启动Ollydbg,打开任意一个EXE程序,在汇编代码区双击任意一行,在弹出的汇编窗口中,输入第一步写好的第一行汇编代码,回车,就可以在机器指令区域(汇编代码区域左侧)看到相应的机器指令了,如此循环,逐行输入所有汇编代码,就可以得到相应的机器指令代码了。 第三步也相对容易,主要工作可能就是将Ollydbg生成的16进制指令代码转换为10进制。如果代码不长,借助“计算器”纯手工操作也行。一般来说,通常会用易语言写一个小程序,解析从Ollydbg中复制出的文本,提取其中的机器指令代码,进行数制转换,生成易语言字节集数据的文本格式。这种小程序很容易写,我想“置入代码”的使用者中很多人(据我了解不下10个)都写过类似的程序,我(liigo)也写过一个。说实话,这种小程序自己用,写的简陋些没关系,反正只是辅助程序,还可以随时调整嘛,但想发布的话,就要考虑通用性易用性,麻烦很多,况且用户也不多,所以发布此类程序的人很少,但是论坛上也确实有人发过。 今天就写这么多。希望读者有所收获。
-------
你试试这个。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
放在DB后面
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询