AS汇编后当指令字节数不为2的次方时as会用0x66填充,可是这样影响了程序的结构。

C、C++和Java语言
回复
_ant
帖子: 5
注册时间: 2010-02-16 22:58
送出感谢: 0
接收感谢: 0

AS汇编后当指令字节数不为2的次方时as会用0x66填充,可是这样影响了程序的结构。

#1

帖子 _ant » 2010-02-16 23:05

RT,我用AS汇编了一下段代码,然后用ld --oformat binary参数链接后生成的程序里就会出现很多0x66,结果运行后程序不正确,而去除0x66后结果正确,怎样解决这个问题,还有0X66是什么指令
davyzhu
帖子: 109
注册时间: 2009-12-06 21:23
送出感谢: 0
接收感谢: 0

Re: AS汇编后当指令字节数不为2的次方时as会用0x66填充,可是这样影响了程序的结构。

#2

帖子 davyzhu » 2010-02-17 10:58

用objdump -d看看?
_ant
帖子: 5
注册时间: 2010-02-16 22:58
送出感谢: 0
接收感谢: 0

Re: AS汇编后当指令字节数不为2的次方时as会用0x66填充,可是这样影响了程序的结构。

#3

帖子 _ant » 2010-02-17 11:31

08048054 <_start>:
8048054: 66 b8 00 b8 mov $0xb800,%ax
8048058: 8e c0 mov %eax,%es
804805a: 66 bb 00 00 mov $0x0,%bx
804805e: 66 b9 ee ee mov $0xeeee,%cx

08048062 <for>:
8048062: 66 b8 41 03 mov $0x341,%ax
8048066: 26 67 66 89 07 addr16 mov %ax,%es:(%bx)
804806b: 66 40 inc %ax
804806d: 66 43 inc %bx
804806f: e2 f1 loop 8048062 <for>
8048071: eb ef jmp 8048062 <for>
_ant
帖子: 5
注册时间: 2010-02-16 22:58
送出感谢: 0
接收感谢: 0

Re: AS汇编后当指令字节数不为2的次方时as会用0x66填充,可是这样影响了程序的结构。

#4

帖子 _ant » 2010-02-17 11:32

对16位寄存器的操作都在前面加了66
davyzhu
帖子: 109
注册时间: 2009-12-06 21:23
送出感谢: 0
接收感谢: 0

Re: AS汇编后当指令字节数不为2的次方时as会用0x66填充,可是这样影响了程序的结构。

#5

帖子 davyzhu » 2010-02-17 12:55

compile的时候是32b的,machine是32b的?asm是用什么编译的,gas还是nasm?
我猜66可能是padding。
davyzhu
帖子: 109
注册时间: 2009-12-06 21:23
送出感谢: 0
接收感谢: 0

Re: AS汇编后当指令字节数不为2的次方时as会用0x66填充,可是这样影响了程序的结构。

#6

帖子 davyzhu » 2010-02-17 13:02

还有,如果cpu不是x86,objdump要指定-m machine。
0x66还有可能是nop,不过nop一般不会插在这里。
_ant
帖子: 5
注册时间: 2010-02-16 22:58
送出感谢: 0
接收感谢: 0

Re: AS汇编后当指令字节数不为2的次方时as会用0x66填充,可是这样影响了程序的结构。

#7

帖子 _ant » 2010-02-17 22:02

0x66是指明后面的代码是16位的(32位代码和16位的机器码相同),但是我这个是写引导代码用的,我希望直接是16位代码,不知道怎么弄,难不成要用16的编译器?
davyzhu
帖子: 109
注册时间: 2009-12-06 21:23
送出感谢: 0
接收感谢: 0

Re: AS汇编后当指令字节数不为2的次方时as会用0x66填充,可是这样影响了程序的结构。

#8

帖子 davyzhu » 2010-02-18 11:00

没有特殊的16b compiler吧 :)
如果用nasm compile的(推荐,intel syntax),有BITS 16, BITS 32的directive的。自己man nasm看一下吧。
_ant
帖子: 5
注册时间: 2010-02-16 22:58
送出感谢: 0
接收感谢: 0

Re: AS汇编后当指令字节数不为2的次方时as会用0x66填充,可是这样影响了程序的结构。

#9

帖子 _ant » 2010-02-18 11:13

我就想用AS编译,不知道有没有试过写引导代码的
头像
zhu527812567
帖子: 883
注册时间: 2009-11-17 12:29
送出感谢: 0
接收感谢: 0
联系:

Re: AS汇编后当指令字节数不为2的次方时as会用0x66填充,可是这样影响了程序的结构。

#10

帖子 zhu527812567 » 2010-02-22 21:20

as默认32/64- -
16的包叫做bin86
回复

回到 “C/C++/Java”