- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我试图理解这段代码中发生了什么,特别是在 __asm__
中。我如何单步执行汇编代码,以便打印每个变量以及不打印什么?
具体来说,我试图逐步解决这个问题,以弄清楚 8()
是什么意思,并了解它如何知道它会进入索引 2 处的数组。
/* a[2] = 99 in assembly */
__asm__("\n\
movl $_a, %eax\n\
movl $99, 8(%eax)\n\
");
最佳答案
stepi
命令一次通过汇编一条指令。还有一个用于单步执行函数调用的 nexti
。这些命令不遵守适用于大多数命令的“仅键入命令的唯一前缀就足够”的规则——部分原因是它们 next
和 step
命令是完全是这些命令的前缀,部分是因为它们不经常使用,当它们被使用时,它们通常被知道他们真的想使用它们的人使用。
info registers
显示很多寄存器内容。
您还需要使用 disassemble
命令查看反汇编。
有关所有这些命令的更多信息可通过 help
命令获得,例如:
(gdb) help info registers
告诉您 info registers
显示整数寄存器及其内容,但它还告诉您,如果您提供寄存器名称,它将把输出限制为该寄存器的值:
(gdb) info registers rax
rax 0x0 0
(rax
是 eax
的 x86_64 版本)第一列是寄存器名称,第二列是十六进制值,第三列是整数值。
disassemble
命令也有有用的帮助
。
请记住,gdb 为许多命令提供了制表符补全功能,这不仅可以用于简单的命令,尽管很多时候它会为您提供不好的建议——不过有时它很有用。
在内联程序集中包含一个标签将使您可以轻松地在它的开头创建一个断点。
关于c - 如何使用 GDB Debugger 查看 __asm__ 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5546331/
我想把C的outb函数移植到D上。 static __inline void outb (unsigned char value, unsigned short int port) { __a
我有一个分配内存的代码,将一些缓冲区复制到分配的内存,然后跳转到该内存地址。 问题是我无法跳转到内存地址。我正在使用 gcc 和 __asm__ 但我无法调用该内存地址。 我想做这样的事情: addr
我在预处理的 C 代码中看到了以下代码。 asm 在函数声明后做什么? extern int scanf (const char *__restrict __format, ...) __asm__
在尝试编译我的项目时,它使用了一些第三方头文件,使用 mingw 4.4,我遇到了以下错误: Assembler messages: Error: junk at end of line, first
几天以来我一直在尝试编写一个非常简单的内联汇编代码,但没有任何效果。我有 NetBeans 作为 IDE 和 MinGW 作为编译器。我最新的代码是: uint16 readle_uint16(con
我想在 c 中使用 char 变量并将其添加到汇编代码中。 char c = 'X'; __asm__ __volatile__("movb '"c"', %ah\n"); 但是当我使用它时,它说需要
我的项目使用C++,包含一个c头文件ira.h如下: #ifdef __cplusplus extern "C" { #endif extern inline void disable_ir
这个问题在这里已经有了答案: CPUID implementations in C++ (3 个答案) 关闭去年。 我正在尝试使用以下 cod 读取 cpuid 信息,但它不起作用。我正在使用 Vi
__asm__ __volatile__ () 的基本作用是什么?对于 ARM 架构,“内存” 的意义是什么? 最佳答案 asm volatile("" ::: "memory"); 创建一个编译器级
我有一段代码调用了 BIOS 文本输出函数,INT 0x10, AH=0x13: static void __stdcall print_raw(uint8_t row, uint8_t col, u
这是一本旧书上的一个小函数: unsigned long f() { __asm__("movl %eax,%esp"); } 函数解释为获取堆栈点,但似乎不是。它实际上获取了一个比我的帧地址低
这个问题在这里已经有了答案: Calling printf in extended inline ASM (1 个回答) 关闭 3 年前。 我正在尝试使用 c __asm__ 打印 AAAA,如下所
我使用的是 VS2012 C++ Windows 7,我需要获取有关 CPU 多线程的信息以计算可用逻辑处理器的数量。 我正在使用此代码(来自 This SO Post) typedef __int3
据我所知,__asm { ... }; 之间的唯一区别和 __asm__("...");是第一次使用mov eax, var第二个使用 movl %0, %%eax与 :"=r" (var)在末尾。还
我研究了一些来自 的C代码 http://www.mcs.anl.gov/~kazutomo/rdtsc.html 他们使用诸如 __inline__、__asm__ 等东西,如下所示: 代码1: s
我试图理解这段代码中发生了什么,特别是在 __asm__ 中。我如何单步执行汇编代码,以便打印每个变量以及不打印什么? 具体来说,我试图逐步解决这个问题,以弄清楚 8() 是什么意思,并了解它如何知道
我在 Linux 环境中处理 Nasm 和 GNU C 内联 asm 有一段时间了,这个功能工作得很好......但现在我正在切换到 Windows 环境,我想使用 Masm(与 VS2008)我不能
这段代码我是在x86_64上写的,编译运行良好, __asm__("nop" : "=eax"(foo) : //"eax"(foo),"ebx
这个问题已经有答案了: What does double underscore ( __const) mean in C? (4 个回答) 已关闭 7 年前。 在c中使用(__)“双下划线”的含义是什
一个代码库有一个 COMPILER_BARRIER宏定义为 __asm__ volatile("" ::: "memory") .宏的目的是防止编译器跨屏障重新排序读写。请注意,这显然是编译器屏障,不
我是一名优秀的程序员,十分优秀!