- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在准备我的操作系统测试。我们使用的工具之一是调试器 (LLDB),我的目标是检查 C 函数或 C++ 方法的参数。
例如:如何查看内存地址和传递给 _SMenuItemCommandID 的参数值? - 我尝试过不同的事情,但都死在了尝试中。
HITestBox`_SMenuItemCommandID(MenuData*, unsigned short, unsigned long):
0x9a7bfc35: pushl %ebp
0x9a7bfc36: movl %esp, %ebp
0x9a7bfc38: pushl %esi
0x9a7bfc39: subl $52, %esp
0x9a7bfc3c: movl 8(%ebp), %esi
0x9a7bfc3f: movl 88(%esi), %eax
0x9a7bfc42: movl %eax, -16(%ebp)
0x9a7bfc45: movzwl 12(%ebp), %ecx
0x9a7bfc49: movw %cx, -12(%ebp)
0x9a7bfc4d: movl $0, -8(%ebp)
0x9a7bfc54: leal -8(%ebp), %edx
0x9a7bfc57: movl %edx, 28(%esp)
0x9a7bfc5b: movl %ecx, 4(%esp)
0x9a7bfc5f: movl %eax, (%esp)
0x9a7bfc62: movl $0, 24(%esp)
0x9a7bfc6a: movl $4, 20(%esp)
0x9a7bfc72: movl $0, 16(%esp)
0x9a7bfc7a: movl $1835232612, 12(%esp)
0x9a7bfc82: movl $12, 8(%esp)
0x9a7bfc8a: calll 0x9a5f7c9b ; elementGetDataAtIndex
0x9a7bfc8f: movl 16(%ebp), %eax
0x9a7bfc92: cmpl %eax, -8(%ebp)
0x9a7bfc95: je 0x9a7bfcae ; _SMenuItemCommandID(MenuData*, unsigned short, unsigned long) + 121
0x9a7bfc97: movl %eax, 4(%esp)
0x9a7bfc9b: leal -16(%ebp), %eax
0x9a7bfc9e: movl %eax, (%esp)
0x9a7bfca1: calll 0x9a7e2914 ; mID::SetCommandID(unsigned long)
0x9a7bfca6: movl %esi, (%esp)
0x9a7bfca9: calll 0x9a5f7c65 ; invalidate(MenuData*)
0x9a7bfcae: xorl %eax, %eax
0x9a7bfcb0: addl $52, %esp
0x9a7bfcb3: popl %esi
0x9a7bfcb4: popl %ebp
0x9a7bfcb5: ret
编辑:假设我正在调试一个没有源代码的应用程序,但我导出了符号。比如说,在某个时刻,这段代码被执行了:
MenuData *myData = (MenuData *)0x28ff44;;
SMenuItemCommandID(myData, 3, 4);
我需要做什么(使用 LLDB)才能获得:
arg0 = 0x28ff44
arg1 =3
arg2 =4
最佳答案
您发布的反汇编是 x86。参数在堆栈上。如果在函数 prolog 之前中断,则参数是相对于堆栈指针 %esp
(在 lldb
中作为 $esp
访问) :
# The return address:
x/w $esp
# The first argument:
x/w $esp+4
# The second argument:
x/w $esp+8
如果您在序言之后中断(在您的示例中为 0x9a7bfc3c
),这是通常放置符号断点的位置,则相对于帧指针找到参数(%ebp
又名 $ebp
):
# The saved frame pointer of the previous frame:
x/w $ebp
# The return address:
x/w $ebp+4
# The first argument:
x/w $ebp+8
# The second argument:
x/w $ebp+12
对于其他架构,参数的存储方式不同,通常在寄存器中。此外,上面假定了“cdecl”调用约定。还有其他人。您是否被告知您应该熟悉哪些架构和调用约定?
关于c++ - 如何打印正在使用 LLDB 调试的 C/C++ 函数的内存地址和参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31972345/
我正在尝试使用 lldb 远程启动和调试新进程没有太大的成功。 通过运行以下命令附加到已启动的进程效果很好: process connect process attach -P gdb-remote
如果我针对给定主题调用 lldb 帮助,大部分内容都会从屏幕上消失。例子: (lldb) help expression 我可以退出调试器,并在 typescript 中收集帮助,但这很笨拙。 lld
在 lldb 中有没有办法继续直到循环结束?我正在寻找 finish 的类似物,但它不是跳出堆栈帧,而是跳出循环。 for (int i = 0; i < 10000000; i++) { .
我已阅读 this tutorial ,但我还没有发现任何有关反向调试的信息。 lldb 是否有一些功能,例如 target record在 gdb 中?如果是,我在哪里可以阅读它? 最佳答案 还没有
lldb 是否具有 gdb 的等效项 shell命令从提示符运行外部命令? (见 How can I execute external commands from the gdb command pr
LLDB 有 convenience variables ?如果是这样,我该如何使用它们?如果没有,我可以使用类似的东西吗? 引用:http://software.intel.com/sites/pr
有没有办法使用 lldb 调试器设置零标志? 类似 gdb 中的 set ($eflags)=似乎只有 register write rflags ... 来设置所有 最佳答案 这是在 lldb 中设
有没有办法使用 lldb 调试器设置零标志? 类似 gdb 中的 set ($eflags)=似乎只有 register write rflags ... 来设置所有 最佳答案 这是在 lldb 中设
我正在使用 lldb 来跟踪调用 CoreFoundation 函数(例如 CFRunLoopTimerCreate)的一些纯 C 或 C++ 代码(32 位)。 我在 CFRunLoopTimerC
我在 lldb 中为我在 MacOS 上安装的基于 C 语言的应用程序设置了很多断点。断点大多设置在应用程序的同一函数中。然而,第二天我回到应用程序继续工作,我又开始在同一个函数中设置断点,出现了一个
您最喜欢的打印 NSArray 内容的方式是什么?使用LLDB? 一个python脚本? 内联 for 循环? 一个Objective-C 方法调用? 我知道按索引打印对象很容易。我想一次打印所有对象
我想从脚本中运行类似以下命令的内容: lldb -f /path/to/my/file -o command1 -o command2 ... -o detach 有没有办法在执行后退出lldb而不进
众所周知,我们可以在 GDB 中使用命令“catch syscall”来中断每个系统函数。 LLDB 中是否有类似的命令? (gdb) catch syscall Catchpoint 1 (sysc
使用 Xcode 10,当我使用断点停止我的应用程序并尝试在控制台中打印对象的内容时,我获得: "Couldn't IRGen expression, no additional error" 但是,
由于这些天在 Mac 上使用 gdb 变得越来越困难(至少我觉得我正在与 Apple 进行艰苦的斗争),所以我开始尝试使用 lldb。 是否有与 gdb -tui 等效的模式,可以显示源代码的良好、持
使用 Xcode 10,当我使用断点停止我的应用程序并尝试在控制台中打印对象的内容时,我得到: "Couldn't IRGen expression, no additional error" 但是,
$cat testleak01.cpp #include int main() { int*p=new int[3]; return 0; } 用调试信息编译它 $g++ testle
如何检查LLDB中不同线程中运行和步进的线程数? GDB 有信息线程。 LLDB 有类似的命令吗? 最佳答案 跑过: (lldb) help thread 命令来看看你可以用 lldb 中的线程做什么
我正在运行 Xubuntu 16.04。从存储库安装 lldb 后,当我尝试使用它时,我得到以下输出: lldb foo (lldb) target create "foo" Current exec
我目前正在为 C++ 中的自定义对象开发绘图命令。我正在使用 Xcode v10.1。 我使用command script import test.py 导入我自己的命令,其中有一个函数如下: imp
我是一名优秀的程序员,十分优秀!