模拟DLL加载
#include <stdio.h>
#include <malloc.h>
#include <sys/stat.h>
typedef int (*PFUNC)(int,int);
typedef struct
{
int Position;
int Length;
}Fun; typedef struct
{
int num;
Fun *pFun;
}Lib; int main()
{ int FileSize =;
char FileName[] = "code.obj";
FILE * FileHandle = fopen(FileName,"rb");
if(FileHandle!=NULL)
{
Lib lib;
fread(&lib.num,sizeof(char),,FileHandle);
//确定文件中有几个函数
lib.pFun =(Fun*)malloc(sizeof(Fun)*lib.num);
fread(lib.pFun,sizeof(Fun),lib.num,FileHandle);
//读取文件中第一个函数的信息,(在文件中的)地址和长度
char *instruction= (char*)malloc(sizeof(char)*lib.pFun->Length);
//根据函数在内存中为函数分配空间
fseek(FileHandle,lib.pFun->Position,);
//移动至函数地址,以字节为单位,0代表文件第一个字节
fread(instruction,sizeof(char),lib.pFun->Length,FileHandle);
//读取函数指令到预留内存
PFUNC pfunc = (PFUNC)instruction;
printf("%d \n",pfunc(,));
//执行函数
}
} /*
说明:
1)没有附带函数类型信息,如果支持函数类型信息,那么可以说这就是DLL文件
2)读取文件时可以把文件想象成一个char A[m],有一个char的指针指向到这个
数组,并在这个数组中前后移动,初始指到A[0],我们总是从这个指针指向的
地址向后读取一定的字节复制到另一个数组,假设指针指向A[0],我们要读取
10个字节,读取完之后,指针定位到A[10],当然,我们也可以借助fseek任意的
移动指针
size_t fread(void *buffer,size_t size,size_t count,FILE *stream)
{
int i=0;
while(stream->ptr!=NULL && i<count)
{
buffer = stream->ptr;
(stream->ptr)++;
}
return i;
} // 假想的函数代码 int fseek( FILE *stream,long offset,int origin)
{
stream->ptr = offset + origin
}
*/
CODE.OBJ
01 00 00 00 0C 00 00 00 2B 00 00 00 55 8B EC 81
EC C0 00 00 00 53 56 57 8D BD 40 FF FF FF B9 30
00 00 00 B8 CC CC CC CC F3 AB 8B 45 08 03 45 0C
5F 5E 5B 8B E5 5D C3
模拟DLL加载的更多相关文章
- System.load(PWConnector.dll)加载异常 Can't find dependent libraries
System.load(PWConnector.dll)加载异常 Can't find dependent libraries 错误信息:D:\PWAdapter\PWConnector.dll: C ...
- 如何解决SoftekBarcode.dll加载失败的问题
本文转自:慧都控件网 Softek Barcode Reader Toolkit是专门从事于条形码读取技术的软件公司Softek旗下一款著名的条码读取工具包.最近有部分用户反映在运行此工具包时会遇到“ ...
- ACCESS DLL加载错误
如今还在用ACCESS 2003,太懒没办法,升到2010变化太大了,做个Access的转版挺麻烦的.况且大家都在使用2003,也就懒得搞了. 但问题是office 2003已经out了,(Offic ...
- 模块“XXX.dll”加载失败
具体问题:模块“XXX.dll”加载失败 请确保该二进制存储在指定的路径中,或者调试它以检查该二进制或相关的.DLL文件是否有问题 找不到指定的模块. 1.在安装C++软件的时候,有时候安装失败提示 ...
- DLL加载,设置相对路径
DLL加载,设置相对路径 1. 加载dll方法之一:(./ 代表当前目录,../ 代表上层目录)包含头文件的相对路径(当前路径为源代码路径,路径 “../../” 当前项目文件夹上级目录),链接lib ...
- 禁用ngen版本的.NET Framework dll加载
在调试时会发现出于性能考虑.NET Framework dll加载的都是ngen版本,比如:System.dll,实际加载System.ni.dll. 如果希望加载非ngen版本,可以设置系统环境变量 ...
- 未能从程序集 C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Data.Entity.Build.Tasks.dll 加载任务“EntityClean”
问题: 未能从程序集 C:\Program Files (x86)\MSBuild\14.0\bin\Microsoft.Data.Entity.Build.Tasks.dll 加载任务“Entity ...
- 利用dll加载漏洞实现远程代码执行
微软的“不安全dll加载”漏洞涉及Windows XP至Windows 7等多个版本的操作系统.由于Windows存在加载未指明完整路径的dll文件的机制,可能导致用户在使用第三方软件.玩游戏.听音乐 ...
- HTTP 筛选器 DLL C:\Windows\Microsoft.Net\Framework\v4.0.30319\aspnet_filter.dll 加载失败。数据是错误。
今天在一台win2003的云主机上,安装.net 4.0时,所有的网站都打不开了.打开事件查看器,发现以下错误: HTTP 筛选器 DLL C:\Windows\Microsoft.Net\Frame ...
随机推荐
- Unix 网络编程(2)——TCP API
TCP C/S套接口函数一般调用过程及基本函数 如上图所示的TCP连接的基本过程.一般来说,服务器先于客户端运行,服务器程序运行的基本过程是: socket()函数创建服务器段socket. bind ...
- 关于Socket通讯原理
通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄. 在Internet上的主机一般运行了多个服务软件,同时提供几种服务. 每种服务都打开一个Socket,并绑定到一 ...
- 模拟HTTP请求的一个工具
在看洪大师的Symfony2的视频教程时,提到一个模拟HTTP请求的工具,HTTPie工具,比Curl好用哦
- 去除ActionBar的方法
今天做一个播放器项目,由于要去除ActionBar,纠结好久,原来这么简单 记录一下 只需要修改AndroidManifest.xml文件中的主题即可 <application android: ...
- FileReader 的了解
FileReader的解释 异步的读取存储在用户计算机上的文件 创建一个FileReader 对象 var reader = new FileReader(); FileReader的方法和事件 参数 ...
- Java 简单算法--打印乘法口诀(只使用一次循环)
package cn.magicdu.algorithm; /** * 九九乘法口诀表 * * @author xiaoduc * */ public class NineNineMulitTable ...
- Microsoft SQL Server 获得本地帮助方法
微软的自带的帮助文档不管是对于开发人员还是DBA都是相当的重要.一般在有网络的状况下可以直接访问 http://msdn.microsoft.com/query/dev10.query?appId=D ...
- UDP 广播 Java
1.服务端 public class UdpBroadcastServer { /** * @param args */ public static void main(String[] args) ...
- java多线程总结一:线程的两种创建方式及优劣比较
1.通过实现Runnable接口线程创建 (1).定义一个类实现Runnable接口,重写接口中的run()方法.在run()方法中加入具体的任务代码或处理逻辑. (2).创建Runnable接口实现 ...
- AIX 配置vncserver
我们安装数据库时,很多情况下客户现场并没有配置图形界面,这是就需要自己配置.vnc就是一个很好的工具vnc rpm包(vnc-3.3.3r2-6.aix5.1.ppc.rpm)下载地址为http:// ...