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

凡科建站视频教程甘肃 网站建设 开发 app

凡科建站视频教程,甘肃 网站建设 开发 app,平凉网站开发,东莞废水处理 东莞网站建设参考资料 Guide to Faster, Less Frustrating Debugging 什么情况下会使用gbd 需要逆向ELF文件时(掌握gdb的使用#xff0c;是二进制安全的基本功)开发程序时#xff0c;程序执行结果不符合预期 动态调试ELF文件可以使用另外一种方法#xff1a;IDA的远程linux动态调试。个… 参考资料 Guide to Faster, Less Frustrating Debugging 什么情况下会使用gbd 需要逆向ELF文件时(掌握gdb的使用是二进制安全的基本功)开发程序时程序执行结果不符合预期 动态调试ELF文件可以使用另外一种方法IDA的远程linux动态调试。个人觉得使用ida调试更为方便因为ida是图形化界面那么可以使用鼠标交互比如通过鼠标光标确定打断点的位置等等。而且IDA具有反编译功能对初学者较为友好。 为什么使用gbd呢 调试程序时我们可能习惯使用printf , cout函数直接将变量打印在控制台上。如果用printf作为调试的主要方式好处是这种做法确实方便但以下缺点也会大大影响调试的进度(以及个人心情) printf一个变量后发现那个变量的值是正确的需要继续printf其他变量大量的printf会将编写的代码变得惨不忍睹在测试完后还需要将编写的printf删除掉如果我们要检查一个结构体变量有没有符合预期使用printf将这个变量的所有属性打印出来十分繁琐。(虽然我更喜欢用IDE自带的调试功能观察2333) 所以我个人认为在编写程序时可以适当使用printf作为调试的手段但如果太过依赖它反而会事倍功半 接下来说一下gbd的好处 需要掌握的命令少和markdown一样熟练使用了就能转换成自己的肌肉记忆。具有一个调试器应该有的功能如可以显示运行程序的寄存器运行时栈堆支持反汇编等等 (虽然使用体验确实比不上支持图形化的调试器2333) 常用命令 知乎GDB使用详解 介绍一下打断点的方式 b functionName: 在函数的入口处添加断点b line: 在文件的第line行添加断点b *adderess 在某一个地址添加断点 解下来以csapp的第二个lab为例讲解pwngdb的使用 这篇博客假设大家已经有汇编语言基础因此我不会花很多篇幅在汇编语句讲解上 我之所以使用pwngdb是因为之前做ctf pwn题目时配置好了。pwngdb比起原版的gdb新增了一些独有的指令尤其是在堆的方面。 csapp lab的网页 https://csapp.cs.cmu.edu/3e/labs.html 分析整个程序的流程如下 输入disassemble main观察main函数反汇编的结果 0x0000000000400e2d 141: call 0x400b10 putsplt0x0000000000400e32 146: call 0x40149e read_line0x0000000000400e37 151: mov rdi,rax0x0000000000400e3a 154: call 0x400ee0 phase_10x0000000000400e3f 159: call 0x4015c4 phase_defused0x0000000000400e44 164: mov edi,0x4023a80x0000000000400e49 169: call 0x400b10 putsplt0x0000000000400e4e 174: call 0x40149e read_line0x0000000000400e53 179: mov rdi,rax0x0000000000400e56 182: call 0x400efc phase_20x0000000000400e5b 187: call 0x4015c4 phase_defused0x0000000000400e60 192: mov edi,0x4022ed0x0000000000400e65 197: call 0x400b10 putsplt0x0000000000400e6a 202: call 0x40149e read_line0x0000000000400e6f 207: mov rdi,rax0x0000000000400e72 210: call 0x400f43 phase_30x0000000000400e77 215: call 0x4015c4 phase_defused0x0000000000400e7c 220: mov edi,0x40230b0x0000000000400e81 225: call 0x400b10 putsplt0x0000000000400e86 230: call 0x40149e read_line0x0000000000400e8b 235: mov rdi,rax0x0000000000400e8e 238: call 0x40100c phase_40x0000000000400e93 243: call 0x4015c4 phase_defused0x0000000000400e98 248: mov edi,0x4023d80x0000000000400e9d 253: call 0x400b10 putsplt0x0000000000400ea2 258: call 0x40149e read_line0x0000000000400ea7 263: mov rdi,rax0x0000000000400eaa 266: call 0x401062 phase_50x0000000000400eaf 271: call 0x4015c4 phase_defused0x0000000000400eb4 276: mov edi,0x40231a0x0000000000400eb9 281: call 0x400b10 putsplt0x0000000000400ebe 286: call 0x40149e read_line0x0000000000400ec3 291: mov rdi,rax0x0000000000400ec6 294: call 0x4010f4 phase_60x0000000000400ecb 299: call 0x4015c4 phase_defused一般来说函数的返回值会放在eax寄存器中。所以以下的代码 0x0000000000400e32 146: call 0x40149e read_line0x0000000000400e37 151: mov rdi,rax0x0000000000400e3a 154: call 0x400ee0 phase_1read_line读取的字符串先放在rax寄存器中再经过mov rdi,rax 放在rdi寄存器中。 接下来分析第一关卡 b phase_1打下断点r运行程序。接着输入一串字符串为了表示方便我称其为input。 按下s 程序单步运行结果如下图。 在上面的截图中程序被蓝色的横线分为了三个区域 最上面的是寄存器区域用于显示各个寄存器的值。寄存器有很多作用比如数据可以存储在寄存器里数据也可以通过寄存器在函数之间传递。高级语言中的if , while等等功能都可以通过汇编语言实现这需要使用到寄存器比如将数据与寄存器中的值进行比较如果小于就进行跳转命令等等。中间区域是反汇编区域这是程序的运行代码。绿色箭头表示程序当前位置。最下面的区域是栈区。栈区存放函数的参数返回地址局部变量等等内容 如果使用gdb按下s的时候可能不会跳出这么多内容 可以使用以下命令打印寄存器的值 info registers或者是 i r要打印栈的内容和栈帧信息可以执行以下命令 info frame或者是 i f继续单步执行。 这段代码告诉我们传入strings_not_equal的参数是什么 一个参数是我们输入的input字符串 。 另一个参数是程序自带的字符串Border relations with Canada have never been better. 解释一下rdi: 0x003780 - 0x333231 0x003780 表示rdi寄存器指向内存地址 0x333231 表示这段地址里存放的值 123 是0x333231 ascii码对应的字符 按下s ,分析strings_not_equal函数的代码 0x401338 strings_not_equal push r120x40133a strings_not_equal2 push rbp0x40133b strings_not_equal3 push rbx0x40133c strings_not_equal4 mov rbx, rdi0x40133f strings_not_equal7 mov rbp, rsi0x401342 strings_not_equal10 call string_length string_length0x401347 strings_not_equal15 mov r12d, eax0x40134a strings_not_equal18 mov rdi, rbp0x40134d strings_not_equal21 call string_length string_length0x401352 strings_not_equal26 mov edx, 10x401357 strings_not_equal31 cmp r12d, eax这段代码调用string_length函数用于取得字符串的长度。接着使用cmp r12d , eax比较两个传入字符串的长度。如果长度一样那么第一关就过了。 接下来验证我们的想法 分别在0x401342 和0x40134d添加临时断点tb *0x401342 tb *0x40134d。然后按下c 运行到断点。按下n让函数执行完毕观察rax 寄存器的值 第一个string_length函数执行完毕的寄存器页面 第二个string_lenth函数执行完毕的寄存器页面 按下r重新运行。输入字符串Border relations with Canada have never been better. 这样关卡1就通过了。 使用gdb是熟能生巧的过程只要多练就能掌握这个软件的使用 照例meme时间 当导师发现你没有在规定时间内完成任务时 be like↓ 摸了一周鱼的我 be like↓ 不多说了要赶紧完成java web的管理系统和qt的文件编辑器了
http://www.pierceye.com/news/314403/

相关文章:

  • 网站内容 优化泉州网站开发公司
  • 假发外贸网站模板做图库网站需要多少钱
  • 网站建设公司 知道万维科技wordpress支持移动
  • 经典网站建设邢台网站建设策划
  • 系统数据库与建设网站网站提交入口大全
  • 网站做数据分析的意义西安网站建设kxccc
  • 免费建个人网站alexa排名搜索
  • 做的网站第二年续费多钱店铺装修模板
  • 这么自己建设网站中卫网站设计厂家
  • 公司网站制作哪家公司好广州建设执业资格注册中心网站
  • 北京所有做招聘类网站建站公司Apache Wordpress伪静态处理
  • 大兴做网站公司制作网页可以用什么软件
  • 该怎么给做网站的提页面需求网上购物平台怎么建立
  • 用pw后缀的网站阳江网络问政平台首页
  • 建站网站建设哪个好网页设计个人总结
  • 网站开发时间进度表宁波网站建设使用技巧分享
  • wordpress官网案例移动端优化
  • 广告投放网宁波seo网络推广报价
  • 网站模板 哪个好烟台高端网站建设公司
  • 福建网站开发手机软件app下载
  • 网站开发的功能需求怎么写网页版式设计分析
  • 荔浦网站开发乐陵新闻最新消息今天
  • 盘锦网站建设服务如何上传网站到空间
  • 怎样建设自己网站常德seo招聘
  • 用别人家网站做跳转做商品抬价是什么兼职网站
  • 合肥市建设信息中心网站怎么做网站的签约编辑
  • 6入空间网站免费观看网站标题怎么修改
  • iis服务器的默认网站wordpress多级分销插件
  • jquery 网站后台模板 仿2021好心人给个开车的网站
  • 济宁定制网站建设推广关于协会网站建设的意见