- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试调试 Linux 内核,特别是蓝牙内核模块。我想单步执行 net/bluetooth/l2cap_core.c
我使用交叉编译工具在主机上用调试符号编译了内核。将内核加载到 pi 上,它启动得很好,我可以在 /proc/kallsyms
l2cap_parse_conf_rsp
# grep l2cap_parse_conf_rsp /proc/kallsyms
bf2b67c4 t l2cap_parse_conf_rsp [bluetooth]
我在KDB中设置了断点。
kdb> bp l2cap_parse_conf_rsp
Instruction(i) BP #0 at 0xbf2a77c4 ([bluetooth]l2cap_parse_conf_rsp)
is enabled addr at 00000000bf2a77c4, hardtype=0 installed=0
kdb> go
我发送了一个蓝牙数据包,并触发了断点。一旦我们进入 KDB shell,我就会切换到 KGDB 模式。
#
Entering kdb (current=0xda4aa8e0, pid 201) due to Breakpoint @ 0xbf2a77c4
kdb>kgdb
Entering please attach debugger or use $D#44+ or $3#33
在我编译内核的主机上,我运行 gdb-multiarch ./vmlinux
。我使用 lx-symbols
加载符号地址。符号似乎已正确加载:
(gdb) info symbol l2cap_parse_conf_rsp
__UNIQUE_ID_alias38 + 43 in section .modinfo of /home/alex/pi/linux/drivers/bluetooth/btusb.ko
__this_module + 172 in section .gnu.linkonce.this_module of /home/alex/pi/linux/drivers/net/wireless/broadcom/brcm80211/brcmutil/brcmutil.ko
l2cap_parse_conf_rsp in section .text.unlikely of /home/alex/pi/linux/net/bluetooth/bluetooth.ko
__UNIQUE_ID_maximum_substreams19 + 14 in section .modinfo of /home/alex/pi/linux/sound/core/snd-pcm.ko
trace_event_define_fields_cfg80211_ready_on_channel + 204 in section .init.text of /home/alex/pi/linux/net/wireless/cfg80211.ko
__ksymtab_snd_unregister_oss_device + 4 in section __ksymtab of /home/alex/pi/linux/sound/core/snd.ko
__UNIQUE_ID_vermagic8 + 46 in section .modinfo of /home/alex/pi/linux/net/rfkill/rfkill.ko
____versions + 588 in section __versions of /home/alex/pi/linux/drivers/char/broadcom/bcm2835-gpiomem.ko
____versions + 724 in section __versions of /home/alex/pi/linux/drivers/regulator/fixed.ko
____versions + 560 in section __versions of /home/alex/pi/linux/drivers/uio/uio_pdrv_genirq.ko
ipv6_addr_label_rtnl_register + 76 in section .init.text of /home/alex/pi/linux/net/ipv6/ipv6.ko
(gdb)
我什至可以看到源代码:
(gdb) list l2cap_parse_conf_rsp
3516 return ptr - data;
3517 }
3518
3519 static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
3520 void *data, u16 *result)
3521 {
3522 struct l2cap_conf_req *req = data;
3523 void *ptr = req->data;
3524 int type, olen;
3525 unsigned long val;
但是,当我单步执行代码时,gdb 无法提取该信息。例如,当我打印回溯时,当前函数显示为 ??
(gdb) bt
#0 0xbf2ae7c4 in ?? ()
#1 0xbf299a14 in l2cap_config_rsp (data=<optimized out>, cmd_len=<optimized out>, cmd=<optimized out>, conn=<optimized out>)
at net/bluetooth/l2cap_core.c:4176
#2 0xbf29ad90 in l2cap_recv_acldata (hcon=<optimized out>, skb=0xd856a240, flags=<optimized out>) at net/bluetooth/l2cap_core.c:7567
#3 0xbf26f9cc in hci_acldata_packet (skb=<optimized out>, hdev=<optimized out>) at net/bluetooth/hci_core.c:4018
#4 hci_rx_work (work=0xda4b5760) at net/bluetooth/hci_core.c:4194
#5 0xc0037f54 in process_one_work (worker=0xd7c10c00, work=0xda4b5760) at kernel/workqueue.c:2096
#6 0xc0038344 in worker_thread (__worker=0xda5d2ae0) at kernel/workqueue.c:2230
#7 0xc003dcc4 in kthread (_create=0xd8995340) at kernel/kthread.c:211
#8 0xc000fba8 in ret_from_fork () at arch/arm/kernel/entry-common.S:118
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
我错过了什么?我如何告诉 GDB 地址 0xbf2ae7c4
对应于符号 l2cap_parse_conf_rsp
?
最佳答案
我会将其标记为已关闭。事实证明,我要查找的特定符号位于“.text.unlikely”部分,而 lx-symbols 不会在该部分中查找符号。我编辑了 scripts/gdb/linux/symbols.py
中的 lx-symbols 脚本以包含 .text.unlikely:
for section_name in [".data", ".data..read_mostly", ".rodata", ".bss", ".text.unlikely"]:
关于linux - KGDB 没有将地址与符号相关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51290446/
给定一个字符串,例如 s="##$$$#",我如何找到索引之前的“#”符号数等于“”数的索引$"符号在索引之后? 示例:如果 s="##$$$#",则输出将为 2。 解释:在索引 2 之前我们有 2
在本教程中,您将借助示例了解 JavaScript 符号。 JavaScript 符号 JavaScript ES6 引入了一种新的原始数据类型,称为 Symbol(符号)。符号是不可变的(不能更改)
在“函数编程的工艺”一书中,符号 '>.>' 将函数连接在一起,与 '.' 的方向相反。但是当我使用 ghci 实现它时,它显示了超出范围的错误 '>.>'。为什么?它是不再使用的旧符号吗? 最佳答案
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我需要从向量中删除 \"。这是我的数据: data <- c("\"https://click.linksynergy.com/link?id=RUxZriH*PWc&offerid=323058.1
我在 Nginx 配置中使用正则表达式来捕获文件 URL,但如果文件 URL 包含 # 符号,正则表达式模式将不会捕获它。 这里是nginx的配置部分。 location ~ ^/p/(?[\w\-=
如何使 & 符号在此图表的第一组条形/列下正确显示: http://jsfiddle.net/VxbrK/2/ 应该是“Apples & Oranges”而不是“Apples & Oranges”。
**在verilog中是什么意思? 我为测试台提供了以下逻辑 localparam NUM_INPUT_BITS = 1; localparam NUM_OUTPUT_BITS
我有一个使用正则表达式来验证电子邮件地址的方法。 public String searchFormail(String searchWord) { Pattern pattern = Patt
我想将一个字符串拆分为数字部分和文本/符号部分我当前的代码不包含负数或小数,并且表现得很奇怪,在输出的末尾添加了一个空列表元素 import re mystring = 'AD%5(6ag 0.33-
我有一些代码需要从数组中选择一个随机字符串,但它一直返回单个字母或数字。如何解决这个问题? var name = ["Yayek", "Vozarut", "Gezex",
我刚开始使用 Python,我在考虑应该使用哪种表示法。我读过 PEP 8关于 Python 符号的指南,我同意那里的大多数内容,除了函数名称(我更喜欢混合大小写风格)。 在 C++ 中,我使用匈牙利
在用 C# 编写代码时,我错误地在 if 语句中的变量前添加了一个符号(而不是感叹号)。 bool b = false; if (@b) { } 我很惊讶它编译成功,没有任何错误。 我想知道:上面的代
本文实例为大家分享了特殊字符替换电话号码中某一部分的方法,ios利用-号替换电话号码中间四位,供大家参考,具体内容如下 1、效果图 2、代码 rootviewcontroll
当我使用“x”和“z”作为符号时,这段代码没有问题: from sympy import * x, z = symbols('x z') y = -6*x**2 + 2*x*z**0.5 + 50*x
我需要从文本中删除标点符号: data <- "Type the command AT&W enter. in order to save the new protocol on modem;"
我有几个数字是 numeric 类。下面的例子。 df = c(12974,12412,124124,124124,34543,4576547,32235) 现在我想在每个数字前添加 '$' 符号而不
我有一个 highcharts 图例,其中符号以不同的大小显示,因为它们在实际图表中的大小不同。不幸的是,当数据点的大小增加时,它们也会在图例中增加。无论数据点大小如何,我都希望图例符号保持相同的大小
我需要使用包含平均值+-SD的标题。到目前为止,我只能得到以下信息: "Mean +- SD or N (%)" [1] "Mean +- SD or N (%)" 如何直接使用“+-”符号?您知道一
使用 XSLT 和 XPath 1.0,我有一个要转义的字符串以用于 URL,例如: one word & another 因此,描述元素的 text() 应该进行 URL 转义。 我该怎么做
我是一名优秀的程序员,十分优秀!