C++如何在r3静态调用NT函数

原文最早发表于百度空间2010-02-22

1、把ntapi.h、ntdll.lib放在一个目录,然后设置工具——选项——项目和解决方案——VC++目录——包含文件,把刚刚的目录设置在改包 含文件中,然后设置库文件,把刚刚的目录设置在改包含文件中。
上面的设置是统一设置,方便以后新建项目都可以使用,如果要对单独的项目进行设置, 则按下面的步骤操作:
把ntapi.h、ntdll.lib放在一个目录,右键点击项目——属性——C/C++——常规——附加包含目录——把刚 刚的目录路径设置在这里;在链接器——常规——附加库目录设置刚刚的目录路径,在链接器——输入——附加依赖项设置ntdll.lib。
2、新建 头文件ABC.h,内容如下:
#ifndef abc_h__
#define abc_h__
#ifndef cplusplus
extern"C"
#endif
#include "ntapi.h"
#pragma comment(lib, "ntdll.lib")
#endif // abc_h__
3、把abc.h放在和ntapi.h同一个目 录,这样就可以静态调用nt函数了,使用例子如下:
#include "stdafx.h"
#include "iostream"
#include "windows.h"
#include "abc.h"
int _tmain(int argc, _TCHAR* argv[])
{
int pid;
std::cout<<"请输入pid:";
std::cin>>pid;
HANDLE kk=OpenProcess(0x1F0FFF, false,pid);
NTSTATUS nStatus = NtTerminateProcess(kk,0);
std::cin>>pid;
return 0;
}

时间: 2024-11-05 12:07:46

C++如何在r3静态调用NT函数的相关文章

VC里面快速调用Nt系列函数示例方法

以下代码仅在Win7 x64测试,可以快速调用NT函数 当初研究的目的也只是为了一个稳定通用的ring3 inline hook bypass funaddr + 5的方法除外,如果你还有其他方法或思路,欢迎交流指导! Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation.保留所有权利. #include <Windows.h> #include <stdio.h> LONG __declspec(n

如何让静态库中的可执行程序不调用的函数不链接进该可执行程序?(-ffunction-sections -Wl,--gc-sections)

如何让静态库中的可执行程序不调用的函数不链接进该可执行程序?(-ffunction-sections -Wl,--gc-sections) 关键词: -Wl,--gc-sections   -ffunction-sections  链接  elf   库 有时我们会遇到这种情况,可执行程序需要链接一些静态库,但是静态库中的函数并没有全部使用,只用了其中的几个,但是系统默认会自动把整个静态库全部链接到可执行程序中,造成可执行程序的大小大大增加,浪费了flash空间和内存空间.gcc为我们提供的解决

如何在C语言中调用Swift函数

在Apple官方的<Using Swift with Cocoa and Objectgive-C>一书中详细地介绍了如何在Objective-C中使用Swift的类以及如何在Swift中使用Objective-C中的类.在后半部分也介绍了如何在Swift中使用C函数,不过对于如何在C语言中使用Swift函数却只字未提.这里我就为大家分享一下如何在C语言中调用Swift函数. 我们首先要知道的是,所有Swift函数都属于闭包.其次,Swift函数的调用约定与Apple为Clang编译器贡献的B

如何在sqlite3连接中创建并调用自定义函数

#!/user/bin/env python # @Time :2018/6/8 14:44 # @Author :PGIDYSQ #@File :CreateFunTest.py '''如何在sqlite3连接中创建并调用自定义函数''' import sqlite3,hashlib #自定义函数 def md5sum(t): return hashlib.md5(t).hexdigest() #在内存中创建临时数据库 conn = sqlite3.connect(":memory:"

【转载】如何在 C#中访问 JavaScript函数?

如何在 C#中访问 JavaScript函数? 时间:13-10-17 栏目:Unity3D教程 作者:zqcyou 评论:0 如何在 C#中访问 JavaScript函数?答案如下:c#代码中执行 javaScript函数: 方法一:1. 1 Page.RegisterStartupScript("ggg","<script>SetVisible(1);</script>"); 方法二:使用 Literal类,然后 1 2 3 4 5 6

Android使用JNI(从java调用本地函数)

当编写一个混合有本地C代码和Java的应用程序时,需要使用Java本地接口(JNI)作为连接桥梁.JNI作为一个软件层和API,允许使用本地代码调用Java对象的方法,同时也允许在Java方法中调用本地函数. 在Java端,开发者所需要做的仅仅是在连接本地函数的方法之前加上native关键字.这样VM就会去寻找这个本地函数. 1.从Java调用本地函数 从Java调用本地函数时,需要在类中定义一个带有native关键字的特有方法,作为连接本地代码的桥梁.通过这个定义,尝试调用本地方法时JVM会找

在printf语句中调用day_name函数并把i值传送给形参n

本例中定义了一个指针型函数day_name,它的返回值指向一个字符串.该函数中定义了一个静态指针数组name.name数组初始化赋值为八个字符串,分别表示各个星期名及出错提示.形参n表示与星期名所对应的整数.在主函数中,把输入的整数i作为实参,在printf语句中调用day_name函数并把i值传送给形参n.day_name函数中的return语句包含一个条件表达式,n值若大于7或小于1则把name[0]指针返回主函数输出出错提示字符串"Illegal day".否则返回主函数输出对应

C#调用windowsAPI函数

一 调用格式 C#在调用windowsAPI函数接口的时候有一套专门的调用流程 首先我们在调用API函数的时候必须引用命名空间InteropServices using System.Runtime.InteropServices; 例如我们想调用windows的kernel32.dll动态库中的接口函数中的AllocConsole()控制台函数接口 下面我们用最简单的调用形式来声明调用此函数接口(空方法,即方法体为空) [DllImport("kernel32.dll")] publ

读书笔记 effective c++ Item 5 了解c++默认生成并调用的函数

1 编译器会默认生成哪些函数  什么时候空类不再是一个空类?答案是用c++处理的空类.如果你自己不声明,编译器会为你声明它们自己版本的拷贝构造函数,拷贝赋值运算符和析构函数,如果你一个构造函数都没有声明,编译器同样会为你声明一个默认拷贝构造函数.这些所有的函数会是public和inline的(Item30).因此,如果你写了下面的类: 1 class Empty{}; 本质上来说和下面的类是一样的: 1 class Empty { 2 3 public: 4 5 Empty() { ... }