首页
社区
课程
招聘
[求助]如何将MASM码转成机器码?
发表于: 2008-11-22 03:30 5276

[求助]如何将MASM码转成机器码?

2008-11-22 03:30
5276
请问一下如何将MASM码转成机器码?
有这样的OD插件吗?
例如:

Input:mov byte ptr [53E620]
Output:C605 20E65300

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

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
2
MASM码 是什么?你说的是汇编代码吗?
在od中调试软件的时候,直接空格键,可以输入汇编代码替换机器码。不过要修改...还是需要其他的十六进制的编辑工具....
2008-11-22 17:10
0
雪    币: 214
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
喔这我知道
我想狐狸误会我的意思了
我现在想要利用Ctrl + B输入HEX + 06以搜寻某个汇编代码
但这样的方法就要先知道要搜寻的汇编代码转成机器码的结果了

Q1.有办法利用OD或OD插件查询汇编代码如何转成机器码吗?
Q2.有没有办法在OD里直接输入汇编代码搜寻?
2008-11-22 17:23
0
雪    币: 427
活跃值: (65)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
A1:只能用工具。。。还不如直接用OD。。。

A2:Ctrl+S
2008-11-22 17:24
0
雪    币: 293
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Ctrl+F 可以查找一条指令
2008-11-22 18:00
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
6
Q1.有办法利用OD或OD插件查询汇编代码如何转成机器码吗?
A1,你可能想问的是汇编是怎么翻译成机器码的吧
  看看罗聪大侠的网站会有收获的..
http://www.luocong.com/learningopcode/doc/1._%E4%BB%80%E4%B9%88%E6%98%AFOpCode%EF%BC%9F.htm
Q2.有没有办法在OD里直接输入汇编代码搜寻?
A2.右键里面有代码查询......不记得名字怎么说的了.有可以搜索代码的...功能..
2008-11-22 19:28
0
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
7
看了一下,不得不说:罗聪写得很烂,而且有些东西是错误的。有误导之嫌
2008-11-22 22:42
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
8
楼上如果乐意可以帮我们大家写一个,普及一下。

估计罗大侠当年也只是笔记而已。问题是写这个,人不是很多。有一两篇可以读读已经是很好了....
2008-11-22 22:48
0
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
9
如果是学习笔记,那么更不应该写成这样。那么就是对 intel 和 amd 所说的话理解错误了。
这东西我几年前是写过,只是没形成文档形式
2008-11-22 22:53
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
10
强烈要求普及...
不要吝啬阿...给大家上一课吧...呵呵.
重新开贴给大家上课。
2008-11-22 23:03
0
雪    币: 723
活跃值: (81)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
11
呵呵,写普及贴可以,不过要整理好才行。

罗聪的错误实在多,现在可以拿罗聪贴子来点评一下它的错误:

就拿它这一点,来说说,汗一下,整个篇幅都有问题。
http://www.luocong.com/learningopcode/doc/2._从哪里开始,到哪里结束.htm

一、eb 这个字节,他理解为:jmp imm8

正确应该为 jmp disp8,这是一个 displacement 值,而非 immediate 值。
凡是 displacement 值都是一个 single value (符号数),它会产生一个符号扩展行为。

也就是说: eb fe   其它等于:  eip = eip + FFFFFFFE

二、 以下是他的原话:

问题来了,我们用肉眼一看就知道,这代表2个字节,我们也知道这条指令应该是从EB开始,总长度是2个字节,到imm8为结束,可是计算机是怎么知道这一点的呢?假如有一串OpCode发送给处理器,例如“90EB0090”,让它从中找到这个jmp指令,它会不会认不出来呢?

又或者,传送一串OpCode给处理器,例如“EB1234”,它会不会把后面的34也算进了jmp的跳转范围呢?

答案是,不会的。
----------------------------------------------------
opcode 只是 instruction 序列的一部分,一串opcode发送给处理器,汗~~
指令序列被从 L1 instruction-cache 里取出来,确实是从 opcode 里解析指令。从而确定指令长度,操作数。

三、重点看看以下他所说的:

00401000    EB FE    JMP 00000000
00401002    90       NOP

此时EIP = 00401000,但是为什么EBFE会是JMP 00000000呢?想想看?

答案:
FE + 02 = 100

-----------------------------------------------------------------------------
应是这样:eb fe 这个 fe (disp8) 值被符号扩展为 fffffffe

结果是: eip = eip + ffffffffe = 00401002 + FFFFFFFe = 00401000
              此时,eip 值是 00401000

所以:下条指令边界是 00401000

四、在运行完一条指令后,EIP并不总是指向下一条指令的开始!

这句是严重错误。除非处理器发生 abort 类型的异常,导致跑飞的情况。

原因综上所述。

五、 下面的论述,错误的太离谱了,哎~~~ 不说了

OpCode:04 AC

00401000 04 AC ADD AL, 0AC

我们已经知道,AC是助记符lodsb的OpCode,00401000是OpCode 04AC的开始地址,而00401002将会是它的结束(这个指令只有2个字节的关系)。但是,我们一直以来都没讨论的是:如果把这条OpCode从中间截断!即从00401001地址处开始的指令会是什么呢?

如果我们把寄存器EIP的内容设置成00401001,我们就会发现:
处理器会把AC看作lodsb,而不是:
ADD AL, 0AC
04:imm8(AL+imm8)中的imm8

应用这个原理,我们来看一个小例子,假设要实现下面的算法:

IF zf = 0
lodsb
ELSE
add al, 0AC

试试写成助记符?不知道读者朋友们会怎么写——我会写成这样:

jnz $+1
add al, 0AC

解释如下:

如果标志位zf等于0,则EIP会指向add al, 0AC的第2个字节,也就是AC——我们知道AC表示助记符lodsb
明白了吗?使人惊奇的是,整个算法的实现只用了区区4个字节!

这个算法的OpCode:

00401000 75 01 JNZ SHORT 3
00401002 04 AC ADD AL, 0AC

让我们来看看每个字节表示什么意思:

75:imm8 是 7501 的域格式
75是JNZ的OpCode,imm8在这里是01,会加到EIP里面去,整个7501表示如果这条指令被执行了,则EIP会指向下一条指令的第2个字节的地址。

04AC的域格式:
04:imm8 其中:
04 - {code}
AC - {Immediate}

整个算法实现的思路如下:

如果zf=0,7501这条指令就会把下一条指令的起始地址+1(75后面的操作数就是需要跳的字节数:0不跳,1跳一个,n就跳n个……但是字节是有符号的,负的就往后跳……所以jnz short xxx是有最大的跳跃限制的),然后把跳跃后的地址赋值给EIP——也就是00401003,从而迫使处理器认为AC所在的地址才是下一条指令的开始(跳过了OpCode 04),这时,AC会被当成{code}。

否则,EIP会指向04AC所在的地址00401002,所以下一条指令的开始就会从04开始算起,处理器会认出域格式:
04:imm8(add al, imm8)
这时,AC会被当成{Immediate},而不是{code}。

呵呵,是不是有点儿迷糊了?

为了加深理解,最后再给大家看一个算法及其实现:

IF zf = 0
inc eax
ELSE
mov al, 40

答案:

00401000 75 01 JNZ SHORT 3
00401002 B0 40 MOV AL, 40

嗯……提示一下:40表示的是inc eax……聪明的你,明白了吗


这个罗聪大侠也错得离谱,估计他是很久很久以前写的吧
2008-11-22 23:43
0
雪    币: 2368
活跃值: (81)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
12
mik 内功很深,罗大侠02 03年写的吧。但是我看的时候受益多多的....不管对错至少对我来说是有很大的益处的。期待mik的普及教程...期待中..............................
2008-11-23 00:14
0
游客
登录 | 注册 方可回帖
返回
//