Assembly 如何检查程序集中的字符串是否为回文?[代码帮助]
我从来没有做过组装,我们只是在学校开始组装,教授给了我们这个代码,但我做得不对,我不知道是什么。。你能看到问题吗Assembly 如何检查程序集中的字符串是否为回文?[代码帮助],assembly,Assembly,我从来没有做过组装,我们只是在学校开始组装,教授给了我们这个代码,但我做得不对,我不知道是什么。。你能看到问题吗 .section .data status: .byte 1 string_A: .ascii "kapak\0" .section .text .globl main main: movl $0, %eax pushl $string_A call string addl $8,%esp .type string, @functio
.section .data
status: .byte 1
string_A: .ascii "kapak\0"
.section .text
.globl main
main:
movl $0, %eax
pushl $string_A
call string
addl $8,%esp
.type string, @function
string:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %esi
movl %esi, %edi
loop:
movl $4, %esi
cmpl $0, %esi
jg petlja
again:
movb (%esi), %al
cmpb (%edi), %al
je uvecaj
jne exit
increase:
addl $1, %edi
addl $-1, %esi
jmp again
movl %ebp, %esp
popl %ebp
ret
exit:
movl $1,%eax
movl $0,%ebx
int $0x80
您应该为我们提供更多的信息: 您需要有关“组装”的帮助。什么集会?我猜您是为x86编写的,但您可能希望在问题中明确这一点。另外,注释代码,特别是在汇编中。这本书不适合人们阅读。另外,当你把代码翻译成英语时,把它全部翻译出来。代码中不存在跳转目标 无论如何,你很幸运,因为这个程序非常简单,可以阅读其中的一些内容: 在
main()
-函数中,调用string()
(这是一个坏名字…),但是在string()
返回后,会发生什么?右侧,堆栈指针增加了8。等等,8?但是您只在pushl$string\u a
中按下了一个指针!这只不过是32位(或4字节)
建筑!->失败
即使没有爆炸,在那之后你也不会返回或退出。您只需保持线性执行。。。右键插入string()
。所以现在字符串从它应该在的位置读取大约8+4=12字节的指针。如果页面访问冲突尚未发生,则该指针可以指向任何地方
我可以尝试对
string()
中的跳转进行反向工程,但是您应该发布可读代码,所以我不会。欢迎使用堆栈溢出!要求人们发现代码中的错误并不特别有效。您应该使用调试器来隔离问题,方法是跟踪程序的进度,并将其与预期发生的情况进行比较。一旦这两个问题出现分歧,你就发现了问题所在。(然后,如果需要,您应该构造一个。)