Win7 VS2015 x64汇编语言编写DLL文件

有点坑记录一下。

首先创建工程时选控制台类型工程,Win32估计就应该选Win32的,反正我测试用的控制台。

然后选DLL类型,除了Empty其他全都去掉。

工程属性,masm勾上。

Linker >> Advanced里

Entry Point写上默认的入口函数

DllEntryPoint

Linker >> Input里

Module Definition File写上你所用的def文件名

建立asm和def文件,如下

ASM

.code

DllEntryPoint proc
	mov rax, 1
	ret
DllEntryPoint endp

AddFun proc
	mov eax, ecx
	add eax, edx
	ret
AddFun endp
end

DEF

LIBRARY "ASM64DLLTest"
EXPORTS
AddFun

然后就可以了,只是一个简单的加法函数,对应C++版本为

__declspec(dllexport) int Add(int a, int b)
{
	return (a + b);
}

然后写个x64控制台程序测试一下。

#include <iostream>

#include <windows.h> 

using namespace std;

typedef int(*MYPROC)(int, int);

int main()
{
	HINSTANCE hinstLib;
	MYPROC ProcAdd;
	BOOL fFreeResult = FALSE;

	// Get a handle to the DLL module.
	hinstLib = LoadLibrary(TEXT("ASM64DLLTest.dll"));

	// If the handle is valid, try to get the function address.
	if (hinstLib != NULL)
	{
		ProcAdd = (MYPROC)GetProcAddress(hinstLib, "AddFun");

		// If the function address is valid, call the function.
		if (NULL != ProcAdd)
		{
			cout << (ProcAdd)(1, 2) << endl;

			cout << "LoadLibrary Success and Function Run" << endl;
		}
		else
		{
			cout << "LoadLibrary Success and GetProcAddress Fail" << endl;
		}

		// Free the DLL module.
		fFreeResult = FreeLibrary(hinstLib);

		if (fFreeResult == 1)
		{
			cout << "FreeLibrary Success" << endl;
		}
		else
		{
			cout << "FreeLibrary Fail" << endl;
		}

	}
	else
	{
		cout << "LoadLibrary Fail" << endl;
	}

	return 0;
}

  

结果

时间: 2024-10-14 08:48:17

Win7 VS2015 x64汇编语言编写DLL文件的相关文章

VC2010编写Dll文件(转)

源:VC2010编写Dll文件 1. 打开VS2010[Flie / New / Project / Visual C++ / Win32 / Win32 Console Application]在下面输入一个名称,比如mydll,然后[OK / Next],然后在Application Type里选择Dll,在Additional Options里选择Exports Symbols,最后点击Finish. 2.在mydll.cpp里面已经有相关的例子模板了.可以照着他的写法写自己的函数.但是注

VS2015生成64位dll文件

导入自己的源文件,准备生成DLL文件.也可以自己创建. 右键项目,进入属性,修改Configuration Type 为 DLL. 修改为64位,Configureation Manager -> ->Active solution platform ,x新添加一个x64. 下面的会自动变为x64. 然后运行,会生成一个x64\debug的目录,里面即为64位DLL. 错误集:1. Error D8016 '/ZI' and '/Gy-'  ...... 解决:Debug   ->  c

C++编写DLL文件

动态链接库DLL文件与EXE文件一样也是可执行文件,但是DLL也被称为库,因为里面封装了各种类.函数之类的东西,就像一个库一样,存着很多东西,主要是用来调用的.调用方式主要分为两种:隐式(通过lib文件与头文件)与显式(只通过DL文件). 二.为什么使用DLL? 微软方面一边开源了很多代码,比如MFC的,这些代码是直接暴露在程序员眼皮子底下的,很容易调用,当然也很容易与程序员代码发生突变,业内也称之为“白盒复用”,有一定的优势,但是也有弊端.在此基础上,我们来聊DLL就比较好,DLL将要一系列代

Win7 VS2015 NASM汇编语言环境配置

参考了以下两个博客文章 http://blog.csdn.net/x356982611/article/details/51260841 http://www.cnblogs.com/antoniozhou/archive/2008/10/23/1318287.html 首先到CodeProject下载NASM的VS配置文件 https://www.codeproject.com/Articles/410776/Integrating-a-compiler-assembler-in-VS-Usi

修复win7 pro X64的mfc100u.dll问题

今天碰到mfc100u.dll丢失问题,网上找了好多资料,都是下载dll然后regsrv32注册的,经过验证这样没法解决: 后来通过安装vc++ 2010运行库解决了:运行库可以从下面地址下载 http://www.xiazaiba.com/html/1547.html

(c#)如何生成利用vs2012生成动态链接库(dll文件)

如上图,新建项目中选择类库.编写dll文件: 如图: 待编写完成我们需要的类库功能时,接下来是要生成这样一个dll文件.步骤如下.鼠标移动到资源管理器的项目名称上,点击鼠标右键,在弹出的的属性框里选择生成就ok啦! 如图: 是不是so easy呢!!哈哈. 下面让我们来介绍介绍使用动态链接库的好处. 在外面学习编程语言最最开始的时候,我们常常在一个main函数里面写满代码来实现各种功能,这样会使一个mian里面拥堵不堪,而且不利于修改代码,降低了可读性.于是我们使用了方法的调用,将各个功能写成一

vs2015中复制C++ DLL 和.pdb文件到C#工程中bin目录的设置方法

在C#工程上面右击选择  -->Properties --> Build Events --> Post-build event command line  , 选择 Edit Post-build ... 然后在里面编辑: xcopy /r /y "$(SolutionDir)\x64\$(ConfigurationName)\GetHeight.dll" "$(TargetDir)" xcopy /r /y "$(SolutionDi

反病毒攻防研究第009篇:DLL注入(上)——DLL文件的编写

一.前言 我之前所编写的用于模拟计算机病毒的对话框程序都是exe文件,所以运行时必将会产生一个进程,产生进程就非常容易被发现.而为了不被发现,可以选择将对话框程序创建为DLL文件.这种文件会加载到已有进程的地址空间中,这样就不会再次创建出进程,隐蔽性相对较好,DLL注入也是恶意程序总会使用的手段.这次我带算用几篇文章的篇幅来论述DLL注入的问题,而这篇文章就首先来讨论一下如何把我之前的对话框程序改写为DLL文件. 二.编写对话框DLL程序 这里我依旧使用VC++6.0,创建一个简单的Win32

delphi 基础之三 编写和调用dll文件

delphi 编写和调用dll文件   Windows 的执行文件可以划分为两种形式程序和动态连接库 (DLLs).一般程序运行是用.EXE文件,但应用程序有时也可以调用存储在DLL的函数. 在如下几种情况下,调用DLL 是合理的: 1) 不同的程序使用相同的DLL ,这样只需要将DLL 在内存中装载一次,节省了内存的开销. 2) 当某些内容需要升级的时候,如果使用DLL 只需要改变DLL 就可以了,而不需要把整个程序都进行变动. 3) 由于DLL 是独立于语言的,所以,当不同语言习惯的人共同开