下一步是经由过程 DWARF 存放器编号查找。此次我会真正检查一个缺点前提以防我们获得一些奇怪的 DWARF 信息。
- uint64_t get_register_value_from_dwarf_register (pid_t pid, unsigned regnum) {
- auto it = std::find_if(begin(g_register_descriptors), end(g_register_descriptors),
- [regnum](auto&& rd) { return rd.dwarf_r == regnum; });
- if (it == end(g_register_descriptors)) {
- throw std::out_of_range{"Unknown dwarf register"};
- }
- return get_register_value(pid, it->r);
- }
- std::string get_register_name(reg r) {
- auto it = std::find_if(begin(g_register_descriptors), end(g_register_descriptors),
- [r](auto&& rd) { return rd.r == r; });
- return it->name;
- }
- reg get_register_from_name(const std::string& name) {
- auto it = std::find_if(begin(g_register_descriptors), end(g_register_descriptors),
- [name](auto&& rd) { return rd.name == name; });
- return it->r;
- }
最后我们会添加一个简单的赞助函数用于导出所有存放器的内容:
- void debugger::dump_registers() {
- for (const auto& rd : g_register_descriptors) {
- std::cout << rd.name << " 0x"
- << std::setfill('0') << std::setw(16) << std::hex << get_register_value(m_pid, rd.r) << std::endl;
- }
- }
正如你看到的,iostreams 有异常精确的接口用于美不雅地输出十六进制数据(啊哈哈哈哈哈哈)。如不雅你爱好你也可以经由过程 I/O 把持器来摆脱这种纷乱。
推荐阅读
在当局改革范畴,淄博市大年夜力履行“互联网+”政务办事,开通网上干事大年夜厅、微信"大众,"办事平台、移动办公APP等网上申报功能,干事企业和群众足不出户就可解决审批,市级网上解决事项零次劈叉和一次>>>详细阅读
地址:http://www.17bianji.com/lsqh/36047.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示