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

设计良好的网站一般需要怎么做烟台网站推广哪家好

设计良好的网站一般需要怎么做,烟台网站推广哪家好,招工网站服务,php做网站会遇到的问题这篇随笔源自今天看的这篇文章http://www.cnblogs.com/bluesea147/archive/2012/05/19/2508208.html 1. 如何修改函数返回地址 今天主要写测试程序思考和验证了一下这个问题#xff0c;先看一下这个#xff23;程序 1 #include stdio.h2 void foo(){3 int a,…这篇随笔源自今天看的这篇文章http://www.cnblogs.com/bluesea147/archive/2012/05/19/2508208.html 1. 如何修改函数返回地址 今天主要写测试程序思考和验证了一下这个问题先看一下这个程序 1 #include stdio.h2 void foo(){3 int a, *p;4 p (void*)((long)a 12);5 *p 20;6 }7 int main(){8 foo();9 printf(First printf call\n); 10 printf(Second printf call\n); 11 printf(Third printf call\n); 12 return 0; 13 } 在我的机子上运行这个程序结果是: third printf call 在foo返回后直接跳到了11去执行这个程序和我看的那篇文章的程序稍有不同主要是我的机子Intel64架构的指针是用8个字节来表示的主要不同在4行long也是8个字节的所以gcc没有做任何的warning之前在一篇随笔中就提到过c应该是在很早的时候就支持各种类型的指针的转换因为这里是对指针指向的内容操作所以用什么类型的指针都是可以的这里是存储的是指令所以就用(void *)了。 第4行代码是让p指向调用main调用foo()时压入栈的那个返回地址改变这个地址的值让它指向一个语句的开头就做到了更改函数的返回地址。 怎么确定如何修改p中的值让它是另一个指令的合法地址呢即指向另一个指令的开始这就要用到objdump了编译链接上面的程序生成可执行文件然后objdump -d。得到下面的片段。 1 00000000004004f4 foo:2 4004f4: 55 push %rbp3 4004f5: 48 89 e5 mov %rsp,%rbp4 4004f8: 48 8d 45 fc lea -0x4(%rbp),%rax5 4004fc: 48 83 c0 0c add $0xc,%rax6 400500: 48 89 45 f0 mov %rax,-0x10(%rbp)7 400504: 48 8b 45 f0 mov -0x10(%rbp),%rax8 400508: 8b 00 mov (%rax),%eax9 40050a: 8d 50 14 lea 0x14(%rax),%edx 10 40050d: 48 8b 45 f0 mov -0x10(%rbp),%rax 11 400511: 89 10 mov %edx,(%rax) 12 400513: 5d pop %rbp 13 400514: c3 retq 14 15 0000000000400515 main: 16 400515: 55 push %rbp 17 400516: 48 89 e5 mov %rsp,%rbp 18 400519: b8 00 00 00 00 mov $0x0,%eax 19 40051e: e8 d1 ff ff ff callq 4004f4 foo # call foo 20 400523: bf 3c 06 40 00 mov $0x40063c,%edi # printf(first..) 21 400528: e8 c3 fe ff ff callq 4003f0 putsplt 22 40052d: bf 4e 06 40 00 mov $0x40064e,%edi # printf(second..) 23 400532: e8 b9 fe ff ff callq 4003f0 putsplt 24 400537: bf 61 06 40 00 mov $0x400661,%edi # printf(third..) 25 40053c: e8 af fe ff ff callq 4003f0 putsplt 26 400541: b8 00 00 00 00 mov $0x0,%eax 27 400546: 5d pop %rbp 28 400547: c3 retq 29 400548: 90 nop 30 400549: 90 nop 31 40054a: 90 nop 32 40054b: 90 nop 33 40054c: 90 nop 34 40054d: 90 nop 35 40054e: 90 nop 36 40054f: 90 nop call foo时压入的返回地址应该是20行的地址0x400523现在把这个值加20改到0x400537就把返回值定位到了24行的指令从上面也可以看出各条指令的大小push是一个字节而上面的mov带了参数也才5个字节。 那如何确定调foo时压入栈的那个返回地址在存储器中的位置而好去修改它呢现在看一下上面c程序中foo()函数对应的gas代码 1 foo:2 pushq %rbp3 movq %rsp, %rbp4 leaq -4(%rbp), %rax # 取a5 addq $12, %rax # a126 movq %rax, -16(%rbp) # p存在-16(%rbp)中7 movq -16(%rbp), %rax8 movl (%rax), %eax9 leal 20(%rax), %edx # *p20%edx 10 movq -16(%rbp), %rax # p%rax 11 movl %edx, (%rax) # %edx*p 12 popq %rbp 13 ret 从第4行可以看出a就存在栈最开始的4个字节中a之上的肯字是入栈的 %rbp这占8个字节, 而这之上的就是由main压入的返回地址因此内存中返回地址的地址就是  a12。   2。gdb的简单使用 用gdb查看一下当汇编指令刚进入foo时栈顶的值这个值应该要是调用foo后main中下条要执行的指令的地址。 如图可以看到在进入foo,执行 pushq %rbp前时栈顶的值确实是main中调用foo之后地那个指令的地址而我们所修改的也就是这个值。 简单的说一说这里gdb的使用在用gcc编译的时候带上-g才会把源代码的信息放在可执行文件中如上面我是从汇编直接编译的带上-g就会把汇编的源代码信息编进可执行码中这样在gdb中才可以单步执行以及在该列出源码的时候列出源码。b是break的简写打断点可以指令某一行代码某个函数或某个地址(地址前加上*), 若指定一个函数则在这个函数开始的代码执行前停住gdb会列出下面一行要执行的代码n是nexti的缩写可以接一个参数表示执行的代码行数这里我说是代码的行数gdb确实是这么做的我把一行放两个语句(用;分割)一个n也就执行过了看来在debug的信息中行是很重要的单位n遇到subroutine call会直接当作一行代码跳过而s(stepi)会进入到函数调用内部。上面有s进入到foo中然后用x查看栈顶的内容 x是用来查看内存中内容的(examin memory)实际上x必须跟上一些信息表示你要查看多少个字节因为地址只会指向一个字节只用x的话默认是上次用过的count和letter size, 图中的x实际上是 x/1xw, 而实际上因为地址用了8个字节来存所以我应该用 x/1xg 的 b, h(half word), w(word), g(giant)分别表示1,2,4,8个字节前面的数是count表示看几个而中间那个x表示hex以16进制显示除了x还有a(address), t(binary), o(octal), d(decimal), i(instruction), c(char), s(string).  其中a(address)这个我在看虚表中内容的时候直接就把函数名给我显示出来了很有用 关于gdb以后会深入的写一些转载于:https://www.cnblogs.com/livingintruth/archive/2012/07/17/2594081.html
http://www.lebaoying.cn/news/42542.html

相关文章:

  • easyui 做的网站wordpress注册表单插件
  • 广东微信网站推广哪家专业wordpress 搜索 排除分类
  • 网站口碑推广娄底网站建设建站
  • 提升网站打开速度怎么做网站建设酷万网络
  • cpa诱导网站怎么做大淘客网站怎么做
  • 创建一个行业网站多少钱WordPress任务发布插件
  • 网站外链接自己可以怎么做保险公司网站
  • 保定专业做网站网站开发模块查相似
  • 网站建设实训心得php黑龙江门户网站建设
  • 网络营销做女鞋的网站设计wordpress用户发文
  • 有做货 物的网站吗建筑企业招聘网站
  • 广州企业网站设计wordpress安装时英文版
  • wordpress怎么制作网站主页seo的中文含义是什么意思
  • 找人给公司做网站去哪找wordpress栏目链接地址
  • 天津市建设监理协会网站赣州微和联网络科技有限公司
  • 网站防止恶意注册嘉兴网站平台建设
  • 绵阳网站建设优化seo教程最新
  • wap建站后只能访问首页换友链的网站
  • 廊坊网站群发关键词4399小游戏在线玩网页版
  • 百度竞价代运营济南新网站优化
  • 公司英文网站做网站常用哪种语言
  • 怎么样制作个网站企业网站中文域名有必要续费吗
  • 群晖wordpress外网无法仿问网站怎么做seo收录
  • 长春市做网站青岛本地招聘网站
  • 网站大气是什么意思12380网站建设情况报告
  • 荼叶公司网站模板简单网站模板
  • 江苏无锡网站推广及优化微信小程序开发的优势
  • 昆明工程建设信息网站网络营销的理论
  • 展示网站源码下载网站免备案
  • 分析网站外链分析工具建设跨境电商网站