gpt4 book ai didi

c - 从 gcc 输出了解汇编

转载 作者:太空狗 更新时间:2023-10-29 15:31:33 25 4
gpt4 key购买 nike

我正在上一门关于计算机基础的高中类(class),我正在尝试理解汇编代码并用 C 语言创建一个 hello world 并用汇编代码编译它。我知道“mov r0,r3”将数据从寄存器 3 移动到寄存器 0。但是,我如何确定 r3 的值是多少?

下面是我用来理解的汇编代码:

.arch armv6
.eabi_attribute 27, 3
.eabi_attribute 28, 1
.fpu vfp
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi_attribute 25, 1
.eabi_attribute 26, 2
.eabi_attribute 30, 6
.eabi_attribute 34, 1
.eabi_attribute 18, 4
.file "hello.c"
.section .rodata
.align 2
.LC0:
.ascii "Hello World\000"
.text
.align 2
.global main
.type main, %function
main:
@ args = 0, pretend = 0, frame = 0
@ frame_needed = 1, uses_anonymous_args = 0
stmfd sp!, {fp, lr}
add fp, sp, #4
ldr r0, .L2
bl printf
mov r0, r3
ldmfd sp!, {fp, pc}
.L3:
.align 2
.L2:
.word .LC0
.size main, .-main
.ident "GCC: (Raspbian 4.9.2-10) 4.9.2"
.section .note.GNU-stack,"",%progbits

下面是我的C代码:

// Hello World program in C

#include<stdio.h>

main()
{
printf("Hello World");
}

最佳答案

使用 GNU 调试器“gdb”!
gdb --args ./store01 启动 GNU 调试器。
它应该像控制台一样工作。
您可以通过键入 quit 退出。
但是你当然想一步一步地运行程序并检查寄存器内容。所以键入 start,它会跳转到 main() 并跳过初始化部分。
然后键入 disassembledisas 以显示您正在运行的汇编程序。
现在每次键入 stepi 时按指令运行程序指令。
现在是有趣的部分:键入 info registers r3 并观察输出!
另一件奇妙的事情:您可以在运行时更改值:尝试 p $r0 = 2
这还不是全部。
这是官方文档:https://www.gnu.org/software/gdb/documentation/
还有一个好的、小而有用的教程:http://thinkingeek.com/2013/01/12/arm-assembler-raspberry-pi-chapter-4

关于c - 从 gcc 输出了解汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46261925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com