- 论坛徽章:
- 0
|
比如这样的指令:
pushl %eax
pushl $output
在,x86_64 里面编译出错,说是
Assembler messages:
Error: suffix or operands invalid for 'push'
最后要改成
pushq %rax
pushq $output
才能编译通过。可是它怎么会跟以前完全不兼容呢?
同样在 amd64 的 FreeBSD 6 里面也是这样出错,只有在 i386 的 redflag 4.1里面才完全没问题。
除了这个,还有 gdb 也有些问题。比如:
.data
value: .int 1
movl value, %ecx
在 i386 的 Linux 里面用 gdb,print/x $ecx 可以看到 $1 = 0x0 这样的正确数值,而且在 x86_64 的 Redhat 和 amd64 的 FreeBSD 里面,print/x $ecx 会显示 $1 = value can't converted integer 这样的说明,只能用 info registers 来看(可以看到显示为 rcx 为 0x1)。必须要改成 movq value, %rcx 才能用 print/x $rcx 查看难道这些 32 位的都已经不兼容了? |
|