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

x86汇编堆栈第二个案例

x86汇编堆栈第二个案例

x86汇编堆栈第二个案例
1)案例介绍
咱们上节课先把常见的x86下的堆栈过了一遍,包括基本指令对吧,除了上一个案例咱们还可以做什么使用现在学到的内容?既然咱们知道了“后进先出(LIFO)的原则”,咱们是不是可以把一个字符串倒叙输出呢哈哈哈?好既然知道原理以后咱们开始进行今天的第二个案例编写哦。


观察ESP栈顶和EBP栈底
0040101F . 52 PUSH EDX
00401020 . 6A 00 PUSH 0 ; /pModule = NULL
00401022 . E8 4BE00A00 CALL <JMP.&KERNEL32.GetModuleHandleA> ; \GetModuleHandleA

画堆栈图案例并进行分析

00F017F2 6A 02 PUSH 2 ;传参
00F017F4 6A 01 PUSH 1
00F017F6 E8 C6FAFFFF CALL Project1.00F012C1 add(00F01770); 调用 add 函数(实际执行地址 00F01770)
00F017FB 83C4 08 ADD ESP,8 ; 调用后清理栈(2个参数各占4字节,共8字节)

00F01770 > 55 PUSH EBP ;提升堆栈/0C0
00F01771 8BEC MOV EBP,ESP
00F01773 81EC C0000000 SUB ESP,0C0
00F01779 53 PUSH EBX ;
00F0177A 56 PUSH ESI
00F0177B 57 PUSH EDI
00F0177C 8BFD MOV EDI,EBP
00F0177E 33C9 XOR ECX,ECX
00F01780 B8 CCCCCCCC MOV EAX,CCCCCCCC
00F01785 F3:AB REP STOS DWORD PTR ES:[EDI]
00F01787 B9 08C0F000 MOV ECX,Project1.00F0C008
00F0178C E8 8FFBFFFF CALL Project1.00F01320
00F01791 90 NOP
00F01792 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ;获取push参数1
00F01795 0345 0C ADD EAX,DWORD PTR SS:[EBP+C] ;eax + 获取push参数2
00F01798 5F POP EDI ;恢复现场
00F01799 5E POP ESI
00F0179A 5B POP EBX
00F0179B 81C4 C0000000 ADD ESP,0C0
00F017A1 3BEC CMP EBP,ESP
00F017A3 E8 97FAFFFF CALL Project1.00F0123F
00F017A8 8BE5 MOV ESP,EBP
00F017AA 5D POP EBP ;恢复栈底
00F017AB C3 RETN ;函数执行完毕,返回


2)案例

;sdk ;https://masm32.com/download.htm ;Project mouse rigth propertis ;Microsoft Macro Assembler -> General -> Include Paths ;C:\masm32\include ;Linker -> General -> Additional Library Directories ;C:\masm32\lib ;Project mouse right -> Build Dependencies -> Build Customizations ;Project mouse file.asm -> propertis -> item type -> Microsoft Macro Assembler ;vs2022 is error ;masm build ;cmd ;C:\masm32\bin\ml.exe /c /nologo /Zi /Fo"Debug\asm2masm32InputOut.obj" /I "C:\masm32\include" /W3 /coff /Cp /TaD:\asm2masm32InputOut.asm ;cd Project4 ;C:\masm32\bin\link.exe /SUBSYSTEM:CONSOLE /LIBPATH:C:\masm32\lib Debug\asm2masm32InputOut.obj user32.lib kernel32.lib /OUT:asm2masm32InputOut.exe ;or ;*.asm mouse rigth find propertis -> Item type select "Cutom Build Tool" -> In General "Command Line" input ;C:\masm32\bin\ml.exe /c /nologo /Zi /Fo"$(OutDir)\$(FileName).obj" /I "C:\masm32\include" /W3 /Ta"$(ProjectDir)asm2masm32InputOut.asm" ;or finally done change error code ;alrt_eventname WCHAR (EVLEN + 1) dup(?) ;alrt_servicename WCHAR (SNLEN + 1) dup(?) .586 ;Instruction set .MODEL flat,stdcall ; Call convention option casemap:none ; Case-sensitive naming matches Windows API ; Link core Windows libraries include windows.inc include user32.inc include kernel32.inc include msvcrt.inc includelib user32.lib includelib kernel32.lib includelib msvcrt.lib .data szStr byte "Hello World",0 ; Source string szStrSize = ($ - szStr) - 1 ; Calculate valid string length ; Output strings 0ah = newline, 0 = null terminator szBefore db 'Before: Hello World', 0ah ,0 ; String before modification szAfter db 'After : %s', 0ah , 0 ; String after modification format specifier .code _mainCRTStartup PROC _mainCRTStartup ENDP END _mainCRTStartup END _mainCRTStartup

其他案例请查看,aes解码,密钥123456789,密文U2FsdGVkX1/Bd4k8ZAij4D8oMKFwS3bBvmalzk3NT7UEJTw7/qemqhDLwG4nl9H9/nO3Xk0Ebmv0W50P9akHkb0F2ubxR31a6lldXh/T1P5UbUFht0mf2SUJwAKMq1bg

http://www.jsqmd.com/news/593825/

相关文章:

  • polarisctf招新赛(web部分
  • 企业电话号码认证服务商,实现华为、小米、荣耀、vivo、oppo手机来电显示公司名 - 企业服务推荐
  • go学习笔记3(变量定义,输入输出,基本数据类型)
  • 云效流水线+K8s实战:Java微服务全自动部署与优化指南(手把手版)
  • 如何彻底销毁敏感数据?开源DBAN工具的终极安全指南
  • 【C++第二十四章】异常
  • web前端开法技术课堂笔记07
  • 3大终极方案解决Amlogic设备U盘启动难题:从故障诊断到系统优化的完整指南
  • 从STM32到FPGA:手把手教你搞定MCU与高速器件的时钟电路设计(晶振篇)
  • 深入解析建造者模式:告别“伸缩构造器”,优雅构建复杂对象
  • 15人开发团队的远程办公“通关秘籍”——飞将让内网互访又快又稳
  • P16185 [LBA-OI R1 B] 战术突破 题解
  • Steam Depot清单自动化工具:Onekey实现游戏数据高效管理的完整方案
  • 智能图片采集工具Image-Downloader:从需求到落地的完整指南
  • 【C++第二十五章】智能指针
  • SpringBoot + 本地事务表 + 定时扫描补偿:轻量级方案实现最终一致性,无中间件依赖
  • 计算机毕业设计:Python二手车智能数据分析与可视化决策平台 Django框架 可视化 线性回归 数据分析 机器学习 深度学习 AI 大模型(建议收藏)✅
  • 用 Win32 API MCP Tool 打通桌面环境控制链路,兼谈 DМχΑРΙ
  • Obsidian Tag Summary插件完全指南:用标签玩出笔记系统的“黑科技感“
  • 20252820 2024-2025-2 《网络攻防实践》第4次作业
  • YimMenu终极指南:5分钟学会GTA5最强安全增强工具
  • JAVA重点基础、进阶知识及易错点总结(34)注解基础(Annotation)
  • OpenCV直线检测避坑指南:HoughLinesP参数调优实战(Python版)
  • Go语言的缓存策略与实现
  • S7-200 MCGS 基于PLC的小型水厂恒压供水系统 带解释的梯形图接线图原理图图纸,io分配
  • 全贴合工艺中Cover Lens Mura不良的关键影响因素与优化策略
  • 【RAG】【vector_stores003】Amazon Neptune - Neptune Analytics向量存储
  • AI率超80%不要慌,这样处理比自己改快10倍
  • 从零搭建WebRTC SFU服务器:基于Mediasoup的1080P视频会议部署教程
  • 告别重复敲命令:用Claude Code + mcp-ssh-manager实现一句话服务器部署(保姆级配置)