原始代码产生以下输出:处理器供应商ID为'GenuineIntel' 下面是原始代码:
1. .section .data
2. output:
3. .ascii “The processor Vendor ID is ‘xxxxxxxxxxxx’\n”
4. .section .text
5. .globl _start
6. _start:
7. movl $0, %eax
8. cpuid
9. movl $output, %edi
11. movl %ebx, 28(%edi)
12. movl %edx, 32(%edi)
13. movl %ecx, 36(%edi)
14 movl $4, %eax
15. movl $1, %ebx
16. movl $output, %ecx
17. movl $42, %edx
18. int $0x80
19. movl $1, %eax
20. movl $0, %ebx
21. int $0x80
我转换为intel会执行,但在代码汇编后屏幕上不显示任何输出:
1. .intel_syntax noprefix
2. .section .data
3. output:
4. .ascii "The processor Vendor ID is 'xxxxxxxxxxxx'\n"
5. .section .text
6. .globl _start
7. _start:
8. mov eax, 0
9. cpuid
10. mov edi, OFFSET output
11. mov [edi+28], ebx
12. mov [edi+32], edx
13. mov [edi+36], ecx
14. mov eax, 4
15. mov ebx, 1
16. mov ecx, output
17. mov edx, 42
18. int 0x80
19. mov eax, 1
20. mov ebx, 0
21. int 0x80
答案 0 :(得分:0)
如果您的代码中没有注释,则可以通过汇编,然后使用其他语法进行反汇编来开始。
如果有的话,可能会或可能不会更容易/更不容易出错,然后移动评论。执行此操作可能不方便保留全局符号名称,但某些反汇编程序可以使用符号表。
即使您决定手动执行,也可以通过组装AT& T和NASM版本来了解您是否犯了任何错误。如果这些二进制文件反汇编到相同的代码,那么你就是好的。如果没有,你应该迅速找到他们不同的地方。