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

贵阳网站设计阳光创信好吗平罗县住房和城乡建设局网站

贵阳网站设计阳光创信好吗,平罗县住房和城乡建设局网站,用c语言怎么做网站,商城型网站的概念栈溢出#xff08;stack overflow#xff09;是最常见的二进制漏洞#xff0c;在介绍栈溢出之前#xff0c;我们首先需要了解函数调用栈。 函数调用栈是一块连续的用来保存函数运行状态的内存区域#xff0c;调用函数#xff08;caller#xff09;和被调用函数#xf…栈溢出stack overflow是最常见的二进制漏洞在介绍栈溢出之前我们首先需要了解函数调用栈。 函数调用栈是一块连续的用来保存函数运行状态的内存区域调用函数caller和被调用函数callee根据调用关系堆叠起来。栈在内存区域中从高地址向低地址生长。 每个函数在栈上都有自己的栈帧用来存放局部变量、函数参数等信息。当caller调用callee时callee对应的栈帧就会被开辟当调用结束返回caller时callee对应的栈帧就会被销毁。 下图展示了栈帧的结构。在32位程序中寄存器ebp指向栈帧的底部用来存储当前栈帧的基址在函数运行过程中不变可以用来索引函数参数和局部变量的位置。寄存器esp指向栈帧的顶部当栈生长时esp的值减少向低地址生长。寄存器eip用于存储下一条指令的地址。在64位程序中三个寄存器分别为rbp、rsp和rip。 当函数调用发生时首先需要保存caller的状态以便函数调用结束后进行恢复然后创建callee的状态。具体来说 如果是32位程序将传给callee的参数按照逆序依次压入caller的栈帧中如果是64位程序前6个参数分别通过rdi、rsi、rdx、rcx、r8、r9进行传递剩余参数从后向前压栈。如果callee不需要参数则这一步骤省略。 对于64位程序如果只有2个参数 mov rsi, arg2 mov rdi, arg1对于64位程序如果有8个参数 push arg8 push arg7 mov r9, arg6 mov r8, arg5 mov rcx, arg4 mov rdx, arg3 mov rsi, arg2 mov rdi, arg1将caller调用callee后的下一条指令的地址压入栈中作为callee的返回地址这样当函数返回后可以正常执行接下来的指令。 将当前ebp寄存器的值压入栈中这是caller栈帧的基址将ebp更新为当前的esp。 将callee的局部变量压入栈中。 函数调用结束后就是上面过程的逆过程callee栈帧中数据会出栈恢复到caller栈帧状态。 上面的第1步由caller完成第2步在caller执行call指令时完成第3、4步由callee完成。 下面看一个具体的例子callerStack.c代码如下 // callerStack.c // C语言函数调用栈 # include stdio.hint func(int arg1, int arg2, int arg3, int arg4, int arg5, int arg6, int arg7, int arg8) {int loc1 arg1 1;int loc2 arg8 8;return loc1 loc2; }int main(void) {int ret func(1, 2, 3, 4, 5, 6, 7, 8);return 0; }用命令gcc -m32 callerStack.c -o callerStack32生成32位程序用gdb反汇编得到的结果如下 这里额外说一下如果是在64位机器上执行上述命令可能会报错 fatal error: bits/libc-header-start.h: No such file or directory #include bits/libc-header-start.h需要安装multilib库sudo apt install gcc-multilib 0x565561dd main endbr32 0x565561e1 main4 push ebp ; 将ebp入栈保存caller的基址esp - 40x565561e2 main5 mov ebp, esp ; 将ebp更新为当前的esp0x565561e4 main7 sub esp, 0x10 ; esp - 0x100x565561e7 main10 call __x86.get_pc_thunk.ax __x86.get_pc_thunk.ax ; 没看懂0x565561ec main15 add eax, 0x2df0 ; 没看懂0x565561f1 main20 push 8 ; 参数入栈esp - 40x565561f3 main22 push 70x565561f5 main24 push 60x565561f7 main26 push 50x565561f9 main28 push 40x565561fb main30 push 30x565561fd main32 push 20x565561ff main34 push 10x56556201 main36 call func func ; 调用func返回地址入栈0x56556206 main41 add esp, 0x20 ; 恢复栈顶0x56556209 main44 mov dword ptr [ebp - 4], eax ; eax存放func的返回值0x5655620c main47 mov eax, 00x56556211 main52 leave 0x56556212 main53 ret 0x565561ad func endbr32 0x565561b1 func4 push ebp ; 将ebp入栈保存caller的基址esp - 40x565561b2 func5 mov ebp, esp ; ebp更新为当前的esp0x565561b4 func7 sub esp, 0x10 ; esp - 0x100x565561b7 func10 call __x86.get_pc_thunk.ax __x86.get_pc_thunk.ax ; 没看懂0x565561bc func15 add eax, 0x2e20 func15 ; 没看懂0x565561c1 func20 mov eax, dword ptr [ebp 8] ; 取出arg1值为1放入eax中0x565561c4 func23 add eax, 1 ; arg1 10x565561c7 func26 mov dword ptr [ebp - 8], eax ; 计算结果局部变量loc1放入栈中0x565561ca func29 mov eax, dword ptr [ebp 0x24] ; 取出arg8值为8放入eax中0x565561cd func32 add eax, 8 ; arg8 80x565561d0 func35 mov dword ptr [ebp - 4], eax ; 计算结果局部变量loc8放入栈中0x565561d3 func38 mov edx, dword ptr [ebp - 8]0x565561d6 func41 mov eax, dword ptr [ebp - 4]0x565561d9 func44 add eax, edx ; eax eax (loc8) edx (loc1)函数返回值存放在eax中0x565561db func46 leave ; mov esp, ebp pop ebp0x565561dc func47 ret ; pop eip以上就是C语言函数的调用过程以及栈的情况但是我还有几点疑问大家可以记录一下 为什么在函数刚开始的地方sub esp, 0x10从后面的代码来看开辟的空间用于存放局部变量那为什么不是在局部变量定义的时候将局部变量的值入栈再移动esp呢而是一次性先esp - 0x10这样不会带来空间的浪费吗 call __x86.get_pc_thunk.ax是什么意思 add eax, 0x2e20有什么作用
http://www.w-s-a.com/news/979275/

相关文章:

  • 门户网站制作费用暴雪公司最新消息
  • 深圳专业建网站公司济南公司做网站的价格
  • 怎么运行自己做的网站网上申请平台怎么申请
  • 旅游公司网站 优帮云新闻近期大事件
  • 电商网站后台报价营销软文小短文
  • 网站建设项目售后服务承诺公司名称邮箱大全
  • 湖南网站建设哪里好做ppt的网站叫什么名字
  • 容城县建设银行网站电子商务网站建设子项目
  • 网站管理助手3.0做淘宝网站用什么软件做
  • 贵阳做网站的公司wordpress趣味插件
  • 自己设置免费网站设计平台南京哪里有做公司网站的
  • 建设公司内网网站的意义自助建站网站的宣传手册
  • 手机建设中网站建立个人网站服务器
  • 网站开发工程师岗位概要网站怎么制作教程
  • 城乡建设主管部门官方网站公司简介模板ppt范文
  • 网站认证必须做么cc0图片素材网站
  • net域名 著名网站国外设计案例网站
  • 淘宝客网站哪里可以做app地推网
  • 宜昌建设厅网站中国最新时事新闻
  • 微网站怎么开发wordpress 发表评论
  • 山东网站建设是什么一页网站首页图如何做
  • 游戏开发与网站开发哪个难万网影
  • 做网站编程语言建筑施工特种证书查询
  • 找人做网站内容自己编辑吗修改wordpress登陆界面
  • 登陆建设银行wap网站湖南网站建设磐石网络答疑
  • 58网站怎么做浏览度才高论坛网站怎么做排名
  • wordpress 手机网站支付京东网站建设的经费预算
  • 自己怎么样做游戏网站做海外贸易网站
  • 建立什么样的网站好制作网页网站代码
  • 岳麓区专业的建设网站公司尚一网常德论坛