我想使用GDB在NASM汇编代码中中断一个本地标签。
发出以下命令会产生以下输出:
(gdb) break *start.label1 + 217
Attempt to extract a component of a value that is not a structure.
下面是我的代码:
global _start
_start:
...
.label1:
...
如何在本地.label1中断
我对一个名为内存的调试工具有问题,我正在打开这个工具--调试工具→→内存→1。
这是我的全部代码:
using System;
using System.Windows.Forms;
namespace CSharpCompleteTutorial
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
public delegate decimal Hesaplama(int adet);
private void Form1_L
通过分解一些二进制代码,我找到了近调用指令call 0x8ae,它被编码为e8 97 08 00 00。
查看指令集引用,我发现这些指令被编码为:
call XX XX XX XX <==> e8 XX XX XX XX
XX XX XX XX是相对于下一条指令的32位位移.
我不明白为什么拆卸指令被编码为e8 97 08 00 00。我本来希望e8 ae 08 00 00的编码是相反的。
核心文件是由剥离了符号的代码发布版本(g++)生成的。
以相同(SVN)版本的代码为例,我修改了构建选项以包含符号。
我应该能够使用我构建的包含符号的可执行文件来调试该核心文件吗?看起来我做不到,但我只是想确保这不是我做错了什么。
bash-3.2$ gdb ./MyTest.53519 -c ~/public_html/core.20375.MyTest
GNU gdb (GDB) Red Hat Enterprise Linux (7.0.1-42.el5)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+
Dump of assembler code for function foo@plt:
0x0000000000400528 <foo@plt+0>: jmpq *0x2004d2(%rip) # 0x600a00 <_GLOBAL_OFFSET_TABLE_+40>
0x000000000040052e <foo@plt+6>: pushq $0x2
0x0000000000400533 <foo@plt+11>: jmpq 0x4004f8
(gdb) disas 0x4004f8
No function co
我是GDB的新手。我想知道地址0xXXXX在每个帧的开头到底是什么意思?
(gdb) bt
#0 g2 (a=4, b=34) at 2.7.c:10
#1 0x0000000008000703 in main (argc=1, argv=0x7ffffffedd48) at 2.7.c:18
这是返回位置的地址,还是函数开始的地址?以下是代码的适用部分。
int g2(int a, int b){
int c = g1(a+3, b-11);
printf("g2: a = %d, b = %d, c = %d\n", a, b, c);
我有一些C代码,它调用一个函数。我正在Windows上的visual中编译这段代码。是否有一种直观的方式查看返回指令(操作码)和返回入口?我试图在Visual中使用内存窗口,但我只看到了缓冲区"blie“和一些十六进制解释内存值。我认为CC可能是一个操作码,但我想有一种方法/软件清楚地查看返回指令和返回入口。
#include <stdio.h>
#include <stdlib.h>
int foo(char *);
int main(int argc, char *argv[])
{
if (argc != 1)
return p