EXE模块说明】的更多相关文章

EXE模块是fastCMS系统内非常优秀的一个功能模块,它将一些操作打包成可执行单元.它具有以下优势: 1)功能明确.便于维护. 2)发起端可获取EXE模块的执行结果. 3)对于不需要执行结果的请求,可以发起异步执行,提高后端的执行速度. EXE模块的执行语法: 原型: exe(json_param, exeType, asyn) 说明: 执行EXE模块 返回: Array Array(0) [True | False] 执行结果 Array(1) [任意类型 | 错误描述字符串] 参数: js…
前言:模块维护试图解决的问题, 模块加载只用MEF的方式: MEF(Managed Extensibility Framework)是一个用于创建可扩展的轻型应用程序的库. 应用程序开发人员可利用该库发现并使用扩展,而无需进行配置. 扩展开发人员还可以利用该库轻松地封装代码,避免生成脆弱的硬依赖项. 通过 MEF,不仅可以在应用程序内重用扩展,还可以在应用程序之间重用扩展.(摘自MSDN), 场景:如果是单机版的软件,添加一个模块只用把一个dll放在程序文件夹里,然后重启软件,就出现了响应模块的…
最近做项目, 有个地方是外包人员写的, 其中有个函数,大致这样 void getInfo(std::shared_ptr<Info>& outInfo); 这个函数是一个dll(链接静态vc库, 使用/MT链接选项). 我在exe(也是/MT选项)中使用这个函数, 一开始看了,感觉危险,为啥呢?因为我是这样调用的 f() { std::shared_ptr<Info> tmpInfo; getInfo(tmpInfo); } 所以,内存是在dll里面分配的,但是 内存在f退…
一.情况 抽象出问题是这样的: class DLL_API1 A { func() { vector vec; B b; b.func(vec); return TRUE; } } 其中B是另一个导出类,定义如下 { private: vector m_vec; public: func( vector &vec ) { vec = m_vec; } } 运行时发现,每次运行到A的return TRUE释放vector的时候,都会报错:user breakpoint called from co…
每个DLL和可执行文件都有一个首选基地址.它表示该模块被映射到进程地址空间时最佳的内存地址.在构建可执行文件时,默认情况下链接器会将它的首选基地址设为0x400000.对于DLL来说,链接器会将它的首选基地址设为0x10000000,然后将该地址以及代码.数据的相关地址都写入它们的PE文件中.当它们被加载时,加载程序读取首选基地址的值,并试图把它们加载到相应位置. 对于可执行文件和DLL中的代码,它们运行的时候所引用的的数据的地址,在链接的时候就已经确定.并且这些都是当exe文件或是DLL被加载…
一.模块隐藏的实现原理 普通API查找模块实现思路:其通过查询在R3中的PEB(Process Environment Block 进程环境块)与TEB(Thread Environment Block 进程环境块)来找到一个双向链表,通过遍历双向链表中某一成员(字符串)来查找全部模块. 模块隐藏实现思路:在R3层的模块隐藏,我们需要做的就是将其该链表断链,将某一模块从这个双向链表中摘除,这样再调用传统的API时就会搜索不到. 二.结构体成员详细介绍 <1> TEB结构体 -- 内存地址为 f…
模块是程序加载时被动态装载的,模块在装载后其存在于内存中同样存在一个内存基址,当我们需要操作这个模块时,通常第一步就是要得到该模块的内存基址,模块分为用户模块和内核模块,这里的用户模块指的是应用层进程运行后加载的模块,内核模块指的是内核中特定模块地址,本篇文章将实现一个获取驱动ntoskrnl.exe的基地址以及长度,此功能是驱动开发中尤其是安全软件开发中必不可少的一个功能. 关于该程序的解释,官方的解析是这样的ntoskrnl.exe是Windows操作系统的一个重要内核程序,里面存储了大量的…
这篇文章是上篇的续集,本文将会继续介绍coreconsole.cpp里面的逻辑.也许大家会看一些CLR的书,我承认我没有看过,因为我觉得一个人,他再NB,那也是他自己的眼光,而且说句难听的,CLR也不是那个写书的人一个人完成的项目,所以他的眼光,我个人看来,也还是很有限的.  PS:谢谢@Grid Science 的建议 承接上篇文章的HostEnvironment,宿主环境:个人认为HOST是指的Windows内核.但是CLR有一个缺点,就是它并不是一个跨平台的,所以广义的说HOST应该是“操…
VC++动态链接库(DLL)编程深入浅出(zz) 1.概论 先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量.函数或类.在仓库的发展史上经历了"无库-静态链接库-动态链接库"的时代. 静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了.但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可…
安装easy_install: 下载ez_setup.py文件,命令行执行python ez_setup.py; 将python文件夹下的Scripts文件夹加入到系统path路径: 检查easy_install可以在命令行执行:easy_install --version; 之后安装库则可在命令行执行:easy_install 库名: 安装numpy时,(easy_install numpy),显示错误: UnicodeEncodeError: 'ascii' codec can't enco…
FastMM使用详解 一.引言      FastMM 是适用于delphi的第三方内存管理器,在国外已经是大名鼎鼎,在国内也有许多人在使用或者希望使用,就连 Borland 也在delphi2007抛弃了自己原有的饱受指责的内存管理器,改用FastMM.      但是,内存管理的复杂性以及缺乏 FastMM 中文文档导致国内许多人在使用时遇到了许多问题,一些人因此而放弃了使用,我在最近的一个项目中使用了FastMM,也因此遇到了许多问题,经过摸索和研究,终于解决了这些问题.二.为什么要用Fa…
Emit动态生成代码 引用:秒懂C#通过Emit动态生成代码 首先需要声明一个程序集名称, // specify a new assembly name var assemblyName = new AssemblyName("Kitty"); 从当前应用程序域获取程序集构造器, // create assembly builder var assemblyBuilder=AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyNam…
22.6 API拦截的一个例子 22.6.1 通过覆盖代码来拦截API (1)实现过程 ①在内存中对要拦截的函数(假设是Kernel32.dll中的ExitProcess)进行定位,从而得到它的内存地址. ②把这个函数的起始的几个字节保存在我们自己的内存中. ③用CPU的一条JUMP指令来覆盖这个函数起始的几个字节,这条JUMP指令用来跳转到我们替代函数的内存地址.当然,我们的替代函数的函数签名必须与要拦截的函数的函数签名完全相同,即所有的参数必须相同,返回值必须相同,调用约定也必须相同. ④现…
继续上一篇(2)未完成的研究,我们接下来学习 KPROCESS这个数据结构. 1. 相关阅读材料 <深入理解计算机系统(原书第2版)> 二. KPROCESS KPROCESS,也叫内核进程块.我们在开始学习它的数据机构之前,首先要思考的一个问题是,它和EPROCESS名字感觉差不多,那它们之间是什么关系呢?它们在内核区域中都位于那一层呢? 我们先来看一张图: windows内核中的执行体负责各种与管理和策略相关的的功能(在学习笔记(2)有相关的介绍).而内核层(或微内核)实现了操作系统的&q…
作者:rendao.org,版权声明,转载必须征得同意. 内存越界,变量被篡改 memset时长度参数超出了数组长度,但memset当时并不会报错,而是操作了不应该操作的内存,导致变量被无端篡改 还可能导致内存越界的函数有memset.memcpy.memmove.strcpy.strncpy.strcat.sprintf等等 临时指针问题,std::string.wstring的c_str()是个临时指针 c_str()返回值是个char*/wchar_t*指针,这个数组的数据是临时的,当有一…
Window Classes in Win32 摘要 本文主要介绍win32系统里窗口类的运做和使用机制,探索一些细节问题,使win32窗口类的信息更加明朗化. 在本文中,"类","窗口类"这两个术语等同,都不是指C++类,而是指和窗口相关的一组信息的集合.[sfqh:我更倾向把window classes翻译为窗口种类.窗口类别\(‘-’)/] 简介 窗口类的风格决定了窗口的外观和风格.所有的窗口都会属于某一个窗口类.在创建一个窗口之前,必须注册(register…
目录 第1章调试说明    1 1.1 调试设置    1 1.2 跟踪代码    2 1.3 断点    2 第2章模块生命周期    4 2.1 exe模块    4 2.2 dll模块    5 第3章调试WinCE程序    7 3.1 部署附加文件    7 3.2 共享文件夹    8 第1章调试说明 1.1 调试设置 使用Visual C++ 6.0打开一个项目,然后按下F5键即可开始调试程序.其实质就是启动VC++调试器,加载exe文件.具体加载哪个exe文件呢?请参考下面的项目…
在InlineHook中修改了zwOpenProcess函数的中的指令 与Resume HookSSDT同理 找出一个正确的值覆盖上去就行. 突发奇想  有没有可能上去一个驱动或者程序  直接卸载掉InlineHook 岂不是很爽 直接映射WCHAR    wzFileFullPath[] = L"\\SystemRoot\\System32\\ntdll.dll"; BOOLEAN MappingPEFileInRing0Space(WCHAR* wzFileFullPath,OUT…
//当Ring3调用OpenProcess //1从自己的模块(.exe)的导入表中取值 //2Ntdll.dll模块的导出表中执行ZwOpenProcess(取索引 进入Ring0层) //3进入Ring0 从Ntoskernel.exe模块的导出表中执行ZwOpenProcess(取索引 获得SSDT服务地址) //4通过索引在SSDT表中取值(NtOpenProcess的地址) //5真正调用NtOpenProcess函数 在真正调用OpenProcess后 可以通过修改里面跳转函数的地址…
#ifndef CXX_IOTIMERINLINEHOOK_H # include "IoTimerInlineHook.h" #endif ULONG32 SSDT_NtOpenProcessIndex = ; pfnNtOpenProcess Old_NtOpenProcess = NULL; PULONG32 ServiceTableBase = NULL; ULONG32 Old_NtOpenProcessOffset = ; //针对Win7 x64 PVOID NtOpen…
首先要知道Ring3层调用OpenProcess的流程 //当Ring3调用OpenProcess //1从自己的模块(.exe)的导入表中取值 //2Ntdll.dll模块的导出表中执行ZwOpenProcess(取索引 进入Ring0层) //3进入Ring0 从Ntoskernel.exe模块的导出表中执行ZwOpenProcess(取索引 获得SSDT服务地址) //4通过索引在SSDT表中取值(NtOpenProcess的地址) //5真正调用NtOpenProcess函数 我们可以通…
http://www.cppblog.com/Walker/archive/2012/11/08/146153.html http://blog.sina.com.cn/s/blog_48f93b530100fsln.html 在Windows平台下用C++开发应用程序,最不想见到的情况恐怕就是程序崩溃,而要想解决引起问题的bug,最困难的应该就是调试release版本了.因为release版本来就少了很多调试信息,更何况一般都是发布出去由用户使用,crash的现场很难保留和重现.本文将给出几个…
应用程序进程本身及其调用的每个DLL模块都具有一个全局唯一的HINSTANCE句柄,它们代表了DLL或EXE模块在进程虚拟空间中的起始地址.进程本身的模块句柄一般为0x400000,而DLL模块的缺省句柄为0x10000000.如果程序同时加载了多个DLL,则每个DLL模块都会有不同的 HINSTANCE.应用程序在加载DLL时对其进行了重定位. 共享MFC DLL(或MFC扩展DLL)的规则DLL涉及到HINSTANCE句柄问题,HINSTANCE句柄对于加载资源特别重要.EXE和DLL都有其…
前面两篇 PE文件结构详解(四)PE导入表 和 PE文件结构详解(五)延迟导入表 介绍了PE文件中比较常用的两种导入方式,不知道大家有没有注意到,在调用导入函数时系统生成的代码是像下面这样的: 在这里,IE的iexplorer.exe导入了Kernel32.dll的GetCommandLineA函数,可以看到这是个间接call,00401004这个地址的内存里保存了目的地址, 根据图中显示的符号信息可知,00401004这个地址是存在于iexplorer.exe模块中的,实际上也就是一项IAT的…
[反汇编练习] 160个CrackMe之018. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大…
[反汇编练习] 160个CrackMe之005. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大…
[反汇编练习] 160个CrackMe之004. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注册机的东西. 其中,文章中按照如下逻辑编排(解决如下问题): 1.使用什么环境和工具 2.程序分析 3.思路分析和破解流程 4.注册机的探索 ---------------------------------- 提醒各位看客: 如果文章中的逻辑看不明白,那你一定是没有亲手操刀!OD中的跳转提示很强大…
DLL重定向 因为DLL的搜索路径有先后次序,假设有这样的场景:App1.exe使用MyDll1.0.dll, App2.exe使用MyDll2.0.dll, MyDll1.0 和 MyDll2.0是同一个DLL的两个版本,1.0为旧版本,2.0为新版本. 而如果MyDll2.0.dll的存放路径的优先次序比较靠前时,那么App1.exe就会去加载MyDll2.0.dll,这就可能引发 DLL地狱问题,因此DLL重定向可解决这个问题. 加载程序总是先检查应用程序目录,我们所要做的就是如下: ①在…
http://blog.csdn.net/cslie/article/details/2158780 SOS 调试扩展 (SOS.dll) 提供公共语言运行时(CLR)内部环境的有关信息,帮助你在WinDbg.exe调试器和Visual Studio中调试托管程序. ![command] [options] 命令 命令 描述 BPMD [<module name> <method name>] [-md <MethodDesc>] 建立一个断点在指定模块的指定方法上.…
1. DLL的概念可以向程序提供一些函数.变量或类. 静态链接库与动态链接库的区别:(1)静态链接库与动态链接库都是共享代码的方式.静态链接库把最后的指令都包含在最终生成的EXE文件中了:动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件.(2) 静态链接库中不能再包含其他的动态链接库或者静态库,而在动态链接库中还可以再包含其他的动态或静态链接库. DLL分类:1.Non-MFC DLL(非MFC动态库):不采用MFC类库结构,其导出函数…