c - 在我的 C 程序中使用 gdb 需要帮助

标签 c assembly

我正在学习汇编语言。 我正在使用 gdb 来了解如何从编写的 C 代码中获取信息。 我试图在每一行的开头查看 rip 寄存器,看看如何 这个程序的每个 C 语句中有多少字节的机器代码? 任何人都可以告诉我 gdb 中的命令来找到这些吗?

#include <stdio.h>

int main(void) {
    register int wye;
    int *ptr;
    int ex;

    ptr = &ex;
    ex = 305441741;
    wye = -1;
    printf("Enter an integer: ");
    scanf("%i", ptr);
    wye += *ptr;
    printf("The result is %i\n", wye);

    return 0;
}

最佳答案

您可以执行的一些简短示例,以查看有关您的程序的一些事情。 $ 是 shell 提示符,gdb> 是 gdb 提示符,所以不要输入:

$ gdb myprogram
    ... info about gdb and myprogram
gdb> disas main
    ... disassembly of the main function
gdb> break main
    ... sets a breakpoint in main; you see a message about this probably calling it breakpoint 1
gdb> run
    ... program starts and stops immediately at the start of main
gdb> i r
    ... lots of info about register contents
gdb> p $rip
    ... current instruction pointer (assuming x86_64)
gdb> s
    ... program runs for one source line.
gdb> p $rip
    ... ip has advanced a bit.

关于c - 在我的 C 程序中使用 gdb 需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12945163/

相关文章:

c++ - 条件下的按位操作设置变量

assembly - x86-64 模拟器应该如何解释字节序列 0x40 0x55?

c - 与高级语言不同的CPUID用法

c - '如何从 C 中的数字中获取最后一位数字?

检查 2d 指针数组是否在 C 中具有用户定义的值?

c - 结构化链表到数组

Windows Loader 对 DLL 的操作

c - 为什么我用 C 编写的以下 getString() 函数不起作用?

assembly - 什么是 callq 指令?

C# 或 C++ 沙盒程序集