VC++ 汇编相关的东西
2024-09-02 03:51:30
Tips: VC++在新建一个.asm文件后必须重新导入project中才能进行编译。
下面是一个汇编与C++相互调用的例子:
Main.cpp
#include <stdio.h>
#include <Windows.h>
#include <string.h> class CTest
{
public:
void Init()
{
m_nSize = 100;
m_pContent = new char[m_nSize];
strcpy(m_pContent,"hello world!");
}
void Show()
{
printf("%s\n",m_pContent);
}
void Destory()
{
if (m_pContent)
{
delete[] m_pContent;
m_pContent = NULL;
}
m_nSize = 0;
}
private:
int m_nSize;
char* m_pContent;
}; extern "C" void __stdcall InitTest(DWORD pThis,DWORD pFunc);
extern "C" int __stdcall bswap_func(int InputVar); int main(int agrc,char* argv[])
{
CTest* pTest = new CTest();
#ifdef TEST_ASM_INFILE
_asm
{
mov eax,pTest
call CTest::Init
}
#else
void (__thiscall CTest::* pFunc)(void) = &CTest::Init;
InitTest((DWORD)pTest,*(DWORD*)&pFunc);
#endif
pTest->Show();
pTest->Destory();
delete pTest; int nTest = 0x12345678;
int nResult = bswap_func(nTest);
printf("Original number:0x%x reverse number:0x%x\n",nTest,nResult);
return 0;
}
Func.asm
.686
.model flat, stdcall .code
InitTest proc pThis:DWORD,pFunc:DWORD
mov ecx,pThis
call pFunc
ret
InitTest endp bswap_func proc InVar:DWORD
mov eax, InVar
bswap eax
ret
bswap_func endp end
最新文章
- mysql 赋予用户权限
- myeclipse性能优化
- CentOs笔记
- 通过分析iframe和无阻塞脚本关系能让我们更懂iframe
- 将u盘的文件复制到虚拟机上的linux系统上面—》文件挂载(文字+图解)
- [课程相关]homework-08
- [codevs1380]没有上司的舞会
- IBM发布AppScan Source 8.7:减少iOS企业级应用安全风险
- 将C#程序嵌入资源中(C# 调用嵌入资源的EXE文件方法)
- oracle11g 导入空表的办法
- BZOJ 1588: Treap 模板
- [LeetCode]题解(python):077-Combinations
- URL中有中文字符,转码方法
- iOS调用另一个程序
- lua 运算符
- jquery系列教程1-选择器全解
- DiscuzX2.5,X3.0,X3.1,X3.2完整目录结构【模板目录template】
- vue-cli创建的项目的目录结构及说明
- 迁移ORACLE_HOME引发的登录sqlplus无法加载类库错误
- 了不起的Node.js--之二
热门文章
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:3.安装Oracle RAC-3.1.安装并配置ASM驱动
- Hadoop之Hbase详解
- SQL Server 高性能写入的一些经验总结
- 2015 Multi-University Training Contest 1记录
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何查看错误代码
- 被动信息收集1——DNS基础 + DNS解析工具 NSLOOKUP使用
- 用shell查找某目录下的最大文件(转)
- Qt Creator项目中使用qss
- Cookie小案例-----记住浏览过的商品记录
- iOS开发-发送邮件(E-mail)方法整理合集(共3种)