博客
关于我
【滴水逆向笔记】C语言参数、变量及if逆向
阅读量:800 次
发布时间:2019-03-25

本文共 1204 字,大约阅读时间需要 4 分钟。

全局变量与局部变量

内存布局是程序运行时将内存划分的逻辑区域。根据需求,程序会将内存分成代码区、堆栈、堆和常量区。

局部变量

局部变量是在函数内部定义的变量。其特点包括:

  • 在编译时没有固定的地址
  • 只有在函数执行时,在堆栈内存中分配内存
  • 函数执行完成后,内存会成为垃圾
  • 只能在函数内部使用
  • 函数变量的反汇编通常是[ebp-4][ebp-8],表示在ebp指针所指的位置减去一定偏移量处的值。

    全局变量

    全局变量是在程序运行时始终存在的变量,其特点包括:

  • 在编译时就分配固定的地址
  • 保留到进程结束才会释放
  • 可以被所有函数修改
  • 最终存留的值是最后一次修改的值
  • 全局变量的反汇编通常是mov寄存器, byte/word/dword ds:[0x12345678]

    参数传递

    参数传递方式可能通过堆栈或寄存器完成。常见的传递方式包括standard calling和fastcall。传递方式取决于如何将参数值从调用函数的上下文传输到目标函数的参数位置。码可以是:

    push ebxpush eaxmov ecx, dword ptr ds: []mov ecx, dword ptr ds: []push 45push 33call 函数地址

    参数是否通过寄存器传递可以通过kernel_movie magnusμ ... 来判断。

    堆数组的使用

    堆数组通常用于存储大量数据。初始化方式包括静态初始化或动态分配。访问数组时需要确认索引是否合理。

    void Function() {    printf("%d\n", arr);}int arr[10] = {1, 3, 7, 2, 8, 11, 5, 23, 22, 10};

    输出结果为4354848。读取单个元素时,需确保索引在数组范围内。

    int x = arr[9];printf("%d\n", x);

    输出结果为10。

    分支语句

    if语句通过跳转实现条件控制。cmp指令用于修改标志寄存器,紧接着的是jcc指令。asmlinkage函数应该 jumps到正确的分支。

    if (x > y) {    // x大于y时执行} else {    // else执行}

    elseif通过多次cmp和jcc实现。逆向分析可验证分支是否处于激活状态。

    函数内部功能分析

    根据技术文档,大致确定可执行的组件。重点关注中间模块的功能,合理分布参数。注意缓存机制和预先定义的函数返回值。例如:

    [DllImport("kernel32.dll")]static uint sprintf(IntPtr hBuf, IntPtr pFormat, char[] arg);int Program_Start() {    // 功能描述    return 0;}int main() {    // 主程序内容    return 0;}

    返回值存储在eax中。

    转载地址:http://pjjyk.baihongyu.com/

    你可能感兴趣的文章
    Mysqldump参数大全(参数来源于mysql5.5.19源码)
    查看>>
    mysqldump备份时忽略某些表
    查看>>
    mysqldump实现数据备份及灾难恢复
    查看>>
    mysqldump数据库备份无法进行操作只能查询 --single-transaction
    查看>>
    mysqldump的一些用法
    查看>>
    mysqli
    查看>>
    MySQLIntegrityConstraintViolationException异常处理
    查看>>
    mysqlreport分析工具详解
    查看>>
    MySQLSyntaxErrorException: Unknown error 1146和SQLSyntaxErrorException: Unknown error 1146
    查看>>
    Mysql_Postgresql中_geometry数据操作_st_astext_GeomFromEWKT函数_在java中转换geometry的16进制数据---PostgreSQL工作笔记007
    查看>>
    mysql_real_connect 参数注意
    查看>>
    mysql_secure_installation初始化数据库报Access denied
    查看>>
    MySQL_西安11月销售昨日未上架的产品_20161212
    查看>>
    Mysql——深入浅出InnoDB底层原理
    查看>>
    MySQL“被动”性能优化汇总
    查看>>
    MySQL、HBase 和 Elasticsearch:特点与区别详解
    查看>>
    MySQL、Redis高频面试题汇总
    查看>>
    MYSQL、SQL Server、Oracle数据库排序空值null问题及其解决办法
    查看>>
    mysql一个字段为空时使用另一个字段排序
    查看>>
    MySQL一个表A中多个字段关联了表B的ID,如何关联查询?
    查看>>