美文网首页
一些汇编题目分析

一些汇编题目分析

作者: 张慕晖 | 来源:发表于2017-09-13 16:58 被阅读52次

最近在学习汇编做MOOC和练习题的时候碰到了几道比较难的题,觉得可以总结一下。

栈溢出和大小端

有如下的C代码以及对应的反汇编出来的汇编代码(x86-32体系结构):

  1. 当strcpy调用完成返回到foo过程时,buf[0]、buf[1]、buf[2]的值分别是多少?
  2. 在执行0x0804850d的ret指令前(popl后),ebp的值是多少?
  3. 上述ret指令执行后,eip的值是多少?用32位16进制表示,注意大小端。e.g. 0x00000000
    字符的十六进制转换表已给出


通过分析可以画出调用strcpy之前完整的栈(具体分析过程略)如下表(每个格子代表4个字节,address向下递减)

内容 指向该位置的指针
callfoo过程保存的%ebp
empty
empty
empty
empty
empty
string address (0x0804859c)
foo过程的返回地址 (0x08048523)
foo过程保存的%ebp %ebp
buf
empty
empty
empty
empty
empty
empty
empty
string address (strcpy的第二个参数)
%ebp - 4 (buf)

可以看出,传递给strcpy的buf指针就是%ebp-4,在复制了字符串"abcdefghi"之后,会发生溢出,破坏栈中保存的%ebp和返回地址。但现在的问题是,在考虑大小端之后,栈中的实际内容到底应该是什么样子的呢?

由于X86的字节序为小端(“低对低,高对高”),可以画出从buf指针开始向上到string address位置中实际的保存内容(一个格子代表一个字节,地址从上往下递减):

描述 内容
string address (高) 08
04
85
string address (低) 9c
foo的返回地址 (高) 08
04
85
foo的返回地址 (低) 23
保存的%ebp (高) ??
??
??
保存的%ebp (低) ??
buf[0] (高) ??
??
??
buf[0] (低) ??

在向以buf开头的地址中写入字符串"abcdefghi\0"(转换成16进制,就是0x61626364656667686900)时,由于char类型的大小只有一个字节,大小端对它来说是无所谓的,只要从低地址向高地址覆写就可以。于是,我们得到了修改过的栈帧:

描述 内容
string address (高) 08
04
85
string address (低) 9c
foo的返回地址 (buf[2]) (高) 08
04
85 00
foo的返回地址 (buf[2]) (低) 23 69
保存的%ebp (buf[1]) (高) ?? 68
?? 67
?? 66
保存的%ebp (buf[1]) (低) ?? 65
buf[0] (高) ?? 64
?? 63
?? 62
buf[0] (低) ?? 61

而寄存器会以小端模式来解释内存中的内容,因此可得,buf[0] = 0x64636261,buf[1] = 0x68676665,buf[2] = 0x08040069;popl后得到的%ebp为0x68676665,执行ret后%eip的值(也就是要返回到什么地址)为0x08040069。

本题来自学堂在线“汇编语言程序设计”,参考了关于x86系统中“大小端”在C++中的应用实例分析函数调用的地址问题。其实,做bufbomb的时候我对char和寄存器之间字节顺序的问题想得还挺明白的,不知怎的现在就忘了……

相关文章

  • 一些汇编题目分析

    最近在学习汇编做MOOC和练习题的时候碰到了几道比较难的题,觉得可以总结一下。 栈溢出和大小端 有如下的C代码以及...

  • pwnable.kr 题解二

    0x01 codemap 1. 题目描述 2. 题目分析 我们直接看IDA反汇编后的代码: 经过分析我们可以看到,...

  • 2021-02-20第8章汇编测试题目

    第8章汇编测试题目 共4道单选题目 【王爽-汇编语言】第八章检测题分析 _fcrane学习博客-CSDN博客 ht...

  • [arm64]6、OC反编译

    1、OC汇编 1.1、分析Person类的汇编过程 person类方法分析 1.2、block反汇编

  • 13: 汇编分析String、Array底层

    一:汇编分析String底层 汇编分析String、Array底层视频[https://www.bilibili....

  • 攻防世界 no-strings-attached(Reverse

    解题概要 使用pe分析是32位文件,使用ida反汇编分析代码逻辑,是一道要求用户输入flag,然后比较的题目。正确...

  • ARM寄存器

    汇编: 分析和修改汇编指令: 用户模式(usr): ARM处理器:

  • 逐行剖析objc_msgSend汇编源码

    前言 本文会带领大家分析ARM64架构下objc_msgSend汇编部分的代码。在此之前希望你能够对汇编有一些简单...

  • 如何在64位系统下运行汇编的软件

    最近学汇编,感觉不上手有点难受,看了就忘,准备上手去刷几套题目发现64位系统根本就无法运行一些写汇编程序的软件,然...

  • 恶意代码分析实战 第十五章 对抗反汇编

    所谓对抗反汇编技术,就是再程序中使用一些特殊构造的代码或者数据,让反汇编分析工具产生不正确的程序代码列表。这种技术...

网友评论

      本文标题:一些汇编题目分析

      本文链接:https://www.haomeiwen.com/subject/mmclsxtx.html