VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 202|回复: 1

[分享] 硬编码复习笔记

[复制链接]
75_avatar_middle
最佳答案
18 
online_supermod 发表于 2020-4-22 11:46:21 | 显示全部楼层 |阅读模式
#include"stdio.h"
_declspec(naked) int fun(int a,int b)//naked表示后面的代码都是以汇编的形式写入
{
        _asm
        {
                push ebp//ebp是当前堆栈的栈底指针,这样主要是为了保存当前堆栈栈底的指针,在后期我们好恢复对战的平衡
                mov ebp,esp//在上面一条语句中push ebp我们将栈底指针压入了栈底,现在讲esp栈顶指针,保存进ebp
                //也就是将原来的栈顶指针现在保存在原来的栈底,现在的栈底保存的是,之前的栈顶指针,而原来的ebp
                //栈底指针我们压入了堆栈中区
                sub esp,0x80//将当前的栈顶指针移动80,假如当前的栈顶指针通过push ebp,mov ebp,esp之后的值是0012fff0的话
                //那就减去0x80  刚好是128个字节,每4个字节成为内存地址的形式那就是32个内存地址

                mov ebx,0x12345678//这个时候讲0x12345678的值,存进ebx中
                push ebx//并且将ebx压入堆栈,这个时候ebx的值在执行完上面一条mov ebx,0x12345678的时候值已经是0x12345678
                //此时的栈顶指针指向的是压入堆栈的ebp地址处
                //为什么一定要pop处eax     测试其他寄存器(你乐意的话写那个通用寄存器都可以,不要写栈顶和栈底2个就行还有eip)

                pop eax//将eax弹出堆栈,

                mov esp,ebp//恢复原来的堆栈
                pop ebp//弹出原来保存在堆栈中的栈底指针
                ret//返回并且按照原来的顺序继续执行
        }
}
int main()
{
        int a;//整形变量a
        a=fun(1,2);//函数调用
        printf("%x\n",a);//打印
        return 0;//返回值因为是int 需要返回值,void则不需要
}


详细得图文笔记在pdf文档中

硬编码复习笔记01.pdf

631.82 KB, 下载次数: 10, 下载积分: 驿站币 -1

评分

参与人数 1驿站币 +2 热心值 +2 收起 理由
58_avatar_small thzzl + 2 + 2 支持原创!

查看全部评分





上一篇:Java实例——基于jsoup的简单爬虫添加代理示例
下一篇:win32汇编笔记

本帖被以下淘专辑推荐:

58_avatar_middle
最佳答案
39 
online_vip 发表于 2020-4-22 16:23:31 | 显示全部楼层
每个程序至少写八遍,向老铁学习!
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-8-12 11:39

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表