zoukankan      html  css  js  c++  java
  • 滴水逆向-数据类型-C代码是怎么变成汇编

    通过调试发现,默认情况下写的C代码通过编译会自动变成汇编代码,但是如果写入下面裸函数代码则C代码不会变成汇编语言

    // dstest1.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    // 空函数
    void Function() {
        
    }
    // 编写一个函数能够对任意2个整数实现加法,并分析函数的反汇编
    
    int plus1(int x,int y)
    {
        return x+y;
    }
    
    // 编写一个函数,能够对任意3个整数实现加法,并分析函数的反汇编
    
    int plus2(int x,int y,int z)
    {
        int t;
        int r;
        t = plus1(x,y);
        r = plus1(t,z);
    
        return r;
    }
    
    //编写一个函数,能够实现对任意5个整数实现加法,使用plus1和plus2
    
    int plus3(int a,int b,int c,int d,int e){
        int i;
        int j;
        int k;
        i = plus1(a,b);
        j = plus2(c,d,e);
        k = i+j;
    
        return k;
    }
    
    
    
    //程序入口
    
    int main(int argc, char* argv[])
    {
        //printf("Hello World!
    ");
        //plus2(3,4,5);
        //plus3(4,5,6,7,8);
        return 0;
    }
    
    
    裸函数
    
    // sjlx.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    
    //无返回值,无参数
    void __declspec(naked) Function()           
    {         
        __asm 
        {
            push ebp
            mov ebp,esp
            sub esp,0x40
            push ebx
            push esi
            push edi
            lea edi,dword ptr ds:[ebp-0x40]
            mov eax,0xCCCCCCCC
            mov ecx,0x10
            rep stosd
    
            pop edi
            pop esi
            pop ebx
            mov esp,ebp
            pop ebp
    
            ret
        }
    } 
    
    int main(int argc, char* argv[])
    {
        //printf("Hello World!
    ");
        Function();
        return 0;
    }
    
    
    =================================================================
    
    //有返回值,有参数
    
    int __declspec(naked) Function2(int x,int y)
    {
        __asm
        {
            push ebp
            mov ebp,esp
            sub esp,0x40
            push ebx
            push esi
            push edi
            lea edi,dword ptr ds:[ebp-0x40]
            mov eax,0xCCCCCCCC
            mov ecx,0x10
            rep stosd
    
            mov eax,dword ptr ds:[ebp+0x8]
            add eax,dword ptr ds:[ebp+0xC]
    
            pop edi
            pop esi
            pop ebx
            mov esp,ebp
            pop ebp
    
            ret
        }
    }
    
    int main(int argc, char* argv[])
    {
        //printf("Hello World!
    ");
        Function2(1,2);
        return 0;
    }
    
    ========================================================================
    
    //带局部变量的函数框架
    
    int __declspec(naked) Function3(int x,int y)
    {
        __asm
        {
            push ebp
            mov ebp,esp
            sub esp,0x40
            push ebx
            push esi
            push edi
            lea edi,dword ptr ds:[ebp-0x40]
            mov eax,0xCCCCCCCC
            mov ecx,0x10
            rep stosd
    
            mov dword ptr ds:[ebp-0x4],3
            mov dword ptr ds:[ebp-0x8],2
    
            mov eax,dword ptr ds:[ebp+0x8]
            add eax,dword ptr ds:[ebp+0xc]
    
            pop edi
            pop esi
            pop ebx
            mov esp,ebp
            pop ebp
    
            ret
        }
    }
    
    int main(int argc, char* argv[])
    {
        //printf("Hello World!
    ");
        Function3(1,2);
        return 0;
    }

    迷茫的人生,需要不断努力,才能看清远方模糊的志向!
  • 相关阅读:
    网络图片获取工具类
    压缩、解压工具类
    字符串排序简单的工具类,数组转list,list转数组
    mysql 实现 sqlserver的row_number over() 方法
    Mysql安装配置及常见问题解决
    Mysql数据库主从配置
    PageHelper:在系统中发现了多个分页插件,请检查系统配置
    Kibana-Elasticsearch分析工具
    Elasticsearch基础环境配置和使用
    取消IDEA双击shift时出现的全局搜索
  • 原文地址:https://www.cnblogs.com/autopwn/p/15069668.html
Copyright © 2011-2022 走看看