itoa+java数组_itoa实施崩溃?

我正在尝试在汇编中实现atoi(netwide汇编程序) . 我通过使用调试器检查寄存器值来验证我的方法是有效的 . 问题是应用程序即将退出时会崩溃 . 我担心我的程序会以某种方式破坏堆栈 . 我正在链接GCC stdlib以允许使用printf函数 . 我注意到它突变了导致意外行为的寄存器(对我无法识别的值的广泛迭代),但是我通过将EAX的值存储在EBX中(未经printf修改)然后在函数调用之后恢复该值来解决这个问题 . 这就是为什么我能够通过单击算法确认程序现在表现得如此,并确认程序在即将终止时崩溃 . 这是代码:

global _main

extern _printf

section .data

_str: db "%d", 0

section .text

_main:

mov eax, 1234

mov ebx, 10

call _itoa

_terminate:

ret

_itoa:

test eax, eax

jz _terminate

xor edx, edx

div ebx

add edx, 30h

push eax

push edx

push _str

call _printf

add esp, 8

pop eax

jmp _itoa

这是stackdump:

例外:STATE_ACCESS_VIOLATION at eip = 00402005 eax = 00000000 ebx = 00000000 ecx = 20000038 edx = 61185C40 esi = 612A3A7C edi = 0022CD84 ebp = 0022ACF8 esp = 0022AC20 program = C:\ Cygwin \ home \ Benjamin \ nasm \ itoa.exe,pid 3556,线程主cs = 001B ds = 0023 es = 0023 fs = 003B gs = 0000 ss = 0023堆栈跟踪:帧功能Args 0022ACF8 00402005(00000000,0022CD84,61007120,00000000)堆栈跟踪结束

编辑:请注意,stackdump不再那么相关,因为程序不再崩溃,它只显示一个不正确的值 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值