当前位置: 首页 > news >正文

做游戏钓鱼网站网页设计模板html免费

做游戏钓鱼网站,网页设计模板html免费,最好看免费观看高清大全英雄联盟,平面设计与广告设计〇、前言 终于来到令人激动的源代码 level 了#xff0c;这里将会有一些很有意思的算法#xff0c;来实现源代码级别的调试#xff0c;这将会非常有趣。 一、使用 libelfin 库 我们不可能直接去读取整个 .debug info 段来进行设置#xff0c;这是没有必要的#xff0c;…〇、前言 终于来到令人激动的源代码 level 了这里将会有一些很有意思的算法来实现源代码级别的调试这将会非常有趣。 一、使用 libelfin 库 我们不可能直接去读取整个 .debug info 段来进行设置这是没有必要的可以使用现成的库。首先初始化 debugger 对象 class debugger { public:debugger (std::string prog_name, pid_t pid): m_prog_name{std::move(prog_name)}, m_pid{pid} {auto fd open(m_prog_name.c_str(), O_RDONLY);m_elf elf::elf{elf::create_mmap_loader(fd)};m_dwarf dwarf::dwarf{dwarf::elf::create_loader(m_elf)};}//...private://...dwarf::dwarf m_dwarf;elf::elf m_elf; };不必太过关注这里函数的细节只需要关注它们做了什么。事实上m_dwarf、m_elf 和 文件名 m_prog_name 关联起来了然后就交给它们进行处理了。我们还需要知道 load_addr这非常重要因为debuf info 只会提供静态的信息load_addr 取决于运行时因此得想办法在 /proc 中获取 void Debugger::initialise_load_address() {if (m_elf.get_hdr().type elf::et::dyn) {std::ifstream map(/proc/ std::to_string(m_pid) /maps);//Read the first address from the filestd::string addr;std::getline(map, addr, -);m_load_address std::stoi(addr, 0, 16);} }二、获取信息 通过一个 pc 怎么获取函数名呢注意这个 pc 是一个 offset addr传参的时候一定要转换。思路很简单首先遍历所有的 cu然后判断 cu 的 low_pc 和 high_pc如果在这个 cu 符合那么就通过 cu 拿到 cu.root。cu.root 是一个根 die通过它可以遍历所有的 die。之后再判断 die的 tag 是不是一个函数如果是且包含 pc那么就是我们要找的函数。实现如下 dwarf::die Debugger::get_function_from_pc(std::intptr_t pc) {for (auto cu : m_dwarf.compilation_units()) { // 循环遍历所有cuif (die_pc_range(cu.root()).contains(pc)) {for (const auto die :cu.root()) { if (die.tag dwarf::DW_TAG::subprogram) { if (die_pc_range(die).contains(pc)) {return die;}}}}}throw std::out_of_range{Cannot find function}; }接着通过 pc 来获取 line entry dwarf::line_table::iterator Debugger::get_line_entry_from_pc(uint64_t pc) {for (auto cu : m_dwarf.compilation_units()) {if (die_pc_range(cu.root()).contains(pc)) {auto lt cu.get_line_table();auto it lt.find_address(pc);if (it lt.end()) {throw std::out_of_range{Cannot find line entry};}else {return it;}}}throw std::out_of_range{Cannot find line entry}; }接着我们打印源代码。思路是通过 debug info 中的源代码路径和 line table 来获取好消息是我们不必做更多的底层实现 void Debugger::print_source(const std::string file_name, unsigned line, unsigned n_lines_context) {std::ifstream file {file_name};auto start_line line n_lines_context ? 1 : line - n_lines_context;auto end_line line n_lines_context (line n_lines_context ? n_lines_context - line : 0) 1;char c{};auto current_line 1u;while (current_line ! start_line file.get(c)) {if (c \n) {current_line;}}std::cout (current_lineline ? : );while (current_line end_line file.get(c)) {std::cout c;if (c \n) {current_line;std::cout (current_lineline ? : );}}std::cout std::endl; }三、测试 minidbg break 0x555555555191 Set breakpoint at address 0x555555555191 minidbg conti Hit breakpoint at adsress 0x555555555191#include iostreamint main() {std::cerr hello,world0.\n;return 0;}我们确实成功的打印出了源代码。上述基本的信息获取基本思路就是对 DWARF 的理解然后利用库函数接口获取我们想要的信息。
http://www.w-s-a.com/news/768972/

相关文章:

  • 高端网站设计官网乌海学校网站建设
  • 哪些网站适合新手编程做项目优秀网页设计赏析
  • 永州网站seo德阳网站建设优化
  • 网站建设高端网站本地建设网站软件下载
  • 网站后台账号密码破解杭州酒店网站设计公司推荐
  • 和县网站开发秦皇岛建设工程信息网站
  • 国外网站用什么dns好建一个下载网站要什么cms系统
  • 礼品工艺品网站建设手机做网站哪家好
  • 泉州网站建设方案维护怎样选择网站建设
  • 江苏建站速度忿先进的网站建设
  • 广州天河建站公司com域名注册多少钱
  • 成都网站建设推广好vs2013如何做网站
  • 茶叶网站建设模板企业网站备案要多少钱
  • 怎么查网站找谁做的win主机伪静态规则 wordpress
  • 轻云服务器菁英版 多个网站北京it外包服务商
  • 售后服务 网站建设阳江seo优化
  • 网站建设后怎么赚钱wordpress调用导航栏
  • 特产网站设计六色网站
  • 服务器网站备案做网站公司如何赚钱
  • 怎样进行站点优化荣成市有做网站的吗
  • 合肥建设工会网站芜湖做网站建设公司
  • 玉林市住房和城乡建设局网站网站开发百灵鸟
  • 网站怎么做双机房切换建设部网站2015年第158号
  • 郑州服务设计公司网站色块的网站
  • 网站设计所用到的技术做网站添加mp3
  • 凡科做的微网站怎样连接公众号seo李守洪排名大师
  • 温州网站开发网站的制作东莞寮步伟易达电子厂
  • 北京网站设计制作关键词优化微信小程序开发推广网站建设优化规划书
  • 杭州临平网站建设开发公司将购房款划给总公司的法律责任
  • 广东外贸网站推广分类wordpress