output1:
.ascii "ebx: %d\n"
output2:
.ascii "eax: %d\n"
.section .text
.globl main
main:
movl $18,%eax
movl $11,%ebx
pushl %ebx
pushl $output1
call printf
# addl $8,%esp
pushl %eax
pushl $output2
call printf
pushl $0
call exit
#怎么也得不出正确答案
我想应该输出
ebx: 11
eax: 18
但总是输出
ebx: 11
eax: 3323728
eax: 24
请各位帮忙阿
7 个解决方案
#1
把 # addl $8,%esp 这句前面的#号去掉试试.
把.ascii改为.asciz试试.
把.ascii改为.asciz试试.
#2
这个问题我已经知道了.谢谢各位!!
但是现在想问另一个问题,就是能不能在在汇编代码中嵌入"指令码",或者专门用指令码写一个程序,怎么编译
例如:#
.section .data
output:
.ascii "output: %d\n"
.section .text
.globl main
main:
movl $5,%ebx
B8 00 00 00 00
BF 00 00 00 00
89 C3
pushl %ebx
pushl $output
call printf
pushl $0
call exit
但是现在想问另一个问题,就是能不能在在汇编代码中嵌入"指令码",或者专门用指令码写一个程序,怎么编译
例如:#
.section .data
output:
.ascii "output: %d\n"
.section .text
.globl main
main:
movl $5,%ebx
B8 00 00 00 00
BF 00 00 00 00
89 C3
pushl %ebx
pushl $output
call printf
pushl $0
call exit
#3
怎么写啊 ,各位大哥帮帮忙啊
#4
你的第1个程序有2处错误:
1、你想打印eax的值,但你在打印ebx值之后,调用了一个printf函数。这时eax值 已经被改变了。
2、你打印ebx之后,因为这个printf函数是不负责平衡堆栈的,所以后面有个add esp的操作。而你打印eax之后没有进行堆栈调整。这样幸亏你调用 了exit。否则会引起程序崩溃。
定义机器码,即指令码,可以用.byte伪命令,相当于.ascii伪指令。我也是现学现卖。
1、你想打印eax的值,但你在打印ebx值之后,调用了一个printf函数。这时eax值 已经被改变了。
2、你打印ebx之后,因为这个printf函数是不负责平衡堆栈的,所以后面有个add esp的操作。而你打印eax之后没有进行堆栈调整。这样幸亏你调用 了exit。否则会引起程序崩溃。
定义机器码,即指令码,可以用.byte伪命令,相当于.ascii伪指令。我也是现学现卖。
#5
B8 00 00 00 00
BF 00 00 00 00
89 C3
能用纯指令码些吗, 怎么写 ,给我举个例子,谢谢
BF 00 00 00 00
89 C3
能用纯指令码些吗, 怎么写 ,给我举个例子,谢谢
#6
试一下 .byte 0xb8,0x0,0x0,...
or .byte $0xb8,$0x0,...
我没有用过这个,是看的教程。。
or .byte $0xb8,$0x0,...
我没有用过这个,是看的教程。。
#7
hao thank you!
#1
把 # addl $8,%esp 这句前面的#号去掉试试.
把.ascii改为.asciz试试.
把.ascii改为.asciz试试.
#2
这个问题我已经知道了.谢谢各位!!
但是现在想问另一个问题,就是能不能在在汇编代码中嵌入"指令码",或者专门用指令码写一个程序,怎么编译
例如:#
.section .data
output:
.ascii "output: %d\n"
.section .text
.globl main
main:
movl $5,%ebx
B8 00 00 00 00
BF 00 00 00 00
89 C3
pushl %ebx
pushl $output
call printf
pushl $0
call exit
但是现在想问另一个问题,就是能不能在在汇编代码中嵌入"指令码",或者专门用指令码写一个程序,怎么编译
例如:#
.section .data
output:
.ascii "output: %d\n"
.section .text
.globl main
main:
movl $5,%ebx
B8 00 00 00 00
BF 00 00 00 00
89 C3
pushl %ebx
pushl $output
call printf
pushl $0
call exit
#3
怎么写啊 ,各位大哥帮帮忙啊
#4
你的第1个程序有2处错误:
1、你想打印eax的值,但你在打印ebx值之后,调用了一个printf函数。这时eax值 已经被改变了。
2、你打印ebx之后,因为这个printf函数是不负责平衡堆栈的,所以后面有个add esp的操作。而你打印eax之后没有进行堆栈调整。这样幸亏你调用 了exit。否则会引起程序崩溃。
定义机器码,即指令码,可以用.byte伪命令,相当于.ascii伪指令。我也是现学现卖。
1、你想打印eax的值,但你在打印ebx值之后,调用了一个printf函数。这时eax值 已经被改变了。
2、你打印ebx之后,因为这个printf函数是不负责平衡堆栈的,所以后面有个add esp的操作。而你打印eax之后没有进行堆栈调整。这样幸亏你调用 了exit。否则会引起程序崩溃。
定义机器码,即指令码,可以用.byte伪命令,相当于.ascii伪指令。我也是现学现卖。
#5
B8 00 00 00 00
BF 00 00 00 00
89 C3
能用纯指令码些吗, 怎么写 ,给我举个例子,谢谢
BF 00 00 00 00
89 C3
能用纯指令码些吗, 怎么写 ,给我举个例子,谢谢
#6
试一下 .byte 0xb8,0x0,0x0,...
or .byte $0xb8,$0x0,...
我没有用过这个,是看的教程。。
or .byte $0xb8,$0x0,...
我没有用过这个,是看的教程。。
#7
hao thank you!