Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 如何检查程序集中的字符串是否为回文?[代码帮助]_Assembly - Fatal编程技术网

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()
中的跳转进行反向工程,但是您应该发布可读代码,所以我不会。

欢迎使用堆栈溢出!要求人们发现代码中的错误并不特别有效。您应该使用调试器来隔离问题,方法是跟踪程序的进度,并将其与预期发生的情况进行比较。一旦这两个问题出现分歧,你就发现了问题所在。(然后,如果需要,您应该构造一个。)