远程调用内核接口(remote call kernel)

内核上项目【远程call】 本次项目代码量过多,但思路相对简单,主要功能为挂起目标主线程,将主线程TrapFrame的rip进行修改跳转到指定的shellcode位置,该ShellCode我写的是弹出MessageBox,然后再恢复线程,最后创建一个工作队列,让系统将我们的ShellCode等痕迹进行清除,因为我只写了关于64位的进程操作,如果是操作32位进程,要在定位到Context结构,进而修改eip。 阅读详情

--------------------------------------------------------------------------------
标题: 远程调用内核接口(remote call kernel)
作者: 叶飞虎
版本: 5.0.0.0
日期: 2014.07.07
--------------------------------------------------------------------------------

1. 概述
    RCK(remote call kernel 缩写)为远程调用内核, 其通讯协议为自定义数据流协议。
RCK 负责远程调用过程中的数据组织, 并不关心实际物理通讯协议, 实则属于逻辑层通讯
协议。

    RCK 通讯槽接口(RCKSlot)负责数据接收和发送, 属于通讯的适配层, 由第三方来实现
实际的数据传输接口。

    RCK 包含 Application, Function, Connection, Command, Response 和 Fields 六
大类, 其主要功能如下:
    a. Application 类主要负责 Function 的组织和 Response 的分发执行;
    b. Function    类主要负责 Function 的定义及按各模式调用;
    c. Connection  类主要负责登录对端应用, Command 请求执行, Response 应答管理,
       以及发送和接收数据等等;
    d. Command     类主要负责函数参数传入, 以及返回值和返回字段值读取;
    e. Response    类主要负责对端指定 Function 请求的执行处理, 如参数读取、返回
       值编辑及提交;
    f. Fields      类主要负责数据库字段值及定义集的组包和拆包。

 

    RC 5.0 下载地址: http://download.youkuaiyun.com/detail/kyee/7610527

 

2. RCK 通讯槽接口定义
    参见 <RCKSlot.h> 文件

 

// =======================================
// Unit   : RCK Slot (RCK 通讯槽接口)
// Version: 5.0.0.0 (build 2014.07.07)
// Author : Kyee Ye
// Email  : kyee_ye(at)126.com
// Copyright (C) Kyee workroom
// =======================================

#ifndef _RCKSlot_H_
#define _RCKSlot_H_

namespace RCKernel
{

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/* 常量定义 */

// 返回值及错误码
enum TRCKResult
        {krSuccess         =  1,       // 成功
         krFailure         =  0,       // 失败
         krUnknown         = -1,       // 未知错误
         krNotExist        = -2,       // 不存在(如: 连接对象)
         krNotConnect      = -3,       // 连接未打开
         krNonsupport      = -4,       // 不支持
         krVersion         = -5,       // 版本不兼容
         krTimeout         = -6,       // 操作超时
         krPassword        = -7,       // 密码错误
         krIsExisted       = -8,       // 已存在
         krIsRefused       = -9,       // 被拒绝
         krIsIllegal       = -10,      // 不合法
         krIsNullName      = -11,      // 名字为空
         krAttrInvalid     = -12,      // 属性无效
         krStateInvalid    = -13,      // 状态无效
         krHandleInvalid   = -14,      // 句柄无效
         krAccessIllegal   = -15};     // 存取非法

// 通讯槽的属性项
enum TRCKSlotAttrib
        {ksaError          = 0,        // 通讯槽打开失败的错误信息
         ksaState          = 1,        // 通讯槽的状态
         ksaConnObj        = 2,        // 通讯槽的绑定连接对象
         ksaCurrAddr       = 3,        // 通讯槽的本地地址
         ksaCurrPort       = 4,        // 通讯槽的本地端口号
         ksaPeerAddr       = 5,        // 通讯槽的对端地址
         ksaPeerPort       = 6,        // 通讯槽的对端端口号
         ksaSlotMaxSize    = 7,        // 通讯槽的数据包最大长度, 默认值: 8192

         // 回调事件属性, 取值范围: [32..63]
         ksaOnDisconnect   = 32,       // 通讯槽的 OnDisconnect 事件, 断开通讯(TRCKSlotOnEvent)
         ksaOnRecvEvent    = 33,       // 通讯槽的 OnRecvEvent  事件, 接收事件(TRCKSlotOnEvent)
         ksaOnRecvData     = 34,       // 通讯槽的 OnRecvData   事件, 接收数据(TRCKSlotOnRecvData)

         // 扩展属性基数
         ksaBaseExtended   = 0x10000}; // 通讯槽的扩展属性基数: 扩展属性项
                                       // (注: 扩展属性项必须小于 0x10000)

// 通讯槽的状态
enum TRCKSlotState
        {kssInactive       = 0,        // 未打开
         kssClosing        = 1,        // 正在关闭
         kssOpening        = 2,        // 正在打开
         kssOpened         = 3};       // 已经打开

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/* 通讯槽对象的函数类型定义 */

// 操作通讯槽的函数类型
typedef void  (__stdcall *TRCKSlotOp)(void* ASlotObj);

// 打开通讯槽的函数类型(返回值定义为 TRCKResult)
typedef long  (__stdcall *TRCKSlotOpen)(void* ASlotObj, long ATimeout);

// 接收数据的函数类型(返回值为接收成功的数据尺寸, 若小于 0 则为错误码)
typedef long  (__stdcall *TRCKSlotRecv)(void* ASlotObj, void* AData, long ASize);

// 发送数据的函数类型(返回值为发送成功的数据尺寸, 若小于 0 则为错误码)
typedef long  (__stdcall *TRCKSlotSend)(void* ASlotObj, const void* AData, long ASize);

// 可以发送的函数类型(返回值为可以发送的数据尺寸, 若小于 0 则为错误码)
typedef long  (__stdcall *TRCKSlotCanSend)(void* ASlotObj, long ASize);

// 取通讯槽整型属性的函数类型(返回值为属性值, ARetCode 为失败的返回码, 允许为空)
typedef long  (__stdcall *TRCKSlotGetInt)(void* ASlotObj, long Attrib, long* ARetCode);

// 取通讯槽指针属性的函数类型(返回值为属性值, ARetCode 为失败的返回码, 允许为空)
typedef void* (__stdcall *TRCKSlotGetObj)(void* ASlotObj, long Attrib, long* ARetCode);

// 取通讯槽字符串属性的函数类型(返回值为属性值, ARetCode 成功时为属性值尺寸, 否则为返回码, 允许为空)
typedef char* (__stdcall *TRCKSlotGetStr)(void* ASlotObj, long Attrib, long* ARetCode);

// 设置通讯槽整型属性的函数类型
typedef long  (__stdcall *TRCKSlotSetInt)(void* ASlotObj, long Attrib, long  AValue);

// 设置通讯槽指针属性的函数类型
typedef long  (__stdcall *TRCKSlotSetObj)(void* ASlotObj, long Attrib, void* AValue);

// 设置通讯槽字符串属性的函数类型
typedef long  (__stdcall *TRCKSlotSetStr)(void* ASlotObj, long Attrib,
                                    const char* AValue,   long ASize);

// 通讯槽对象事件的回调函数类型
typedef void  (__stdcall *TRCKSlotOnEvent)(void* ASlotObj, void* AConnObj);

// 通讯槽对象 OnRecvData 事件的回调函数类型
// 注: 若 Recv 方法为 NULL 则通过 OnRecvData 事件接收数据,
//     否则通过 OnRecvEvent  事件来调用 Recv 方法接收数据.
typedef void  (__stdcall *TRCKSlotOnRecvData)(void* ASlotObj, void* AConnObj,
                                        const void* AData,    long  ASize);

// 通讯槽对象的方法列表
#pragma pack(push, 1)
typedef struct
{
   long              Size;             // = sizeof(TRCKSlotMethods)

   TRCKSlotOpen      Open;             // 打开通讯槽
   TRCKSlotOp        Close;            // 关闭通讯槽
   TRCKSlotOp        FreeObj;          // 释放通讯槽对象

   TRCKSlotRecv      Recv;             // 接收数据
   TRCKSlotSend      Send;             // 发送数据
   TRCKSlotCanSend   CanSend;          // 可以发送的数据尺寸

   TRCKSlotGetInt    GetInt;           // 取通讯槽整型属性
   TRCKSlotGetObj    GetObj;           // 取通讯槽指针属性
   TRCKSlotGetStr    GetStr;           // 取通讯槽字符串属性

   TRCKSlotSetInt    SetInt;           // 设置通讯槽整型属性
   TRCKSlotSetObj    SetObj;           // 设置通讯槽指针属性
   TRCKSlotSetStr    SetStr;           // 设置通讯槽字符串属性
} TRCKSlotMethods, *PRCKSlotMethods;
#pragma pack(pop)

}

#endif


3. RCK 接口定义
    参见 <RCKernel.h> 文件

 

// =======================================
// Unit   : RC Kernel
// Version: 5.0.0.0 (build 2014.07.07)
// Author : Kyee Ye
// Email  : kyee_ye(at)126.com
// Copyright (C) Kyee workroom
// =======================================

#ifndef _RCKernel_H_
#define _RCKernel_H_

#include "RCKSlot.h"

#pragma comment(lib, "RCKernel.lib")

namespace RCKernel
{

// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

/* 常量定义 */

// 数据类型
enum TRCKDataType
        {kdtNone           = 0,        // 无类型
         kdtString         = 1,        // 字符串类型  (自定义尺寸)
         kdtInteger        = 2,        // 整型类型    (4 Bytes)
         kdtBoolean        = 3,        // 布尔类型    (1 Bytes)
         kdtDouble         = 4,        // 浮点类型    (8 Bytes)
         kdtStruct         = 5,        // 结构类型    (自定义尺寸)
         kdtByte           = 6,        // 字节        (1 Bytes)
         kdtWord           = 7,        // 双字节      (2 Bytes)
         kdtSmallint       = 8,        // 16位整型    (2 Bytes)
         kdtInt64          = 9,        // 64位整型    (8 Bytes)
         kdtDateTime       = 10,       // 日期时间类型(8 Bytes)
         kdtCurrency       = 11};      // 货币类型    (8 Bytes)

// 接口的属性项
enum TRCKAttrib
        {kaVersion         = 0,        // 接口版本信息, 格式: "x.x.x.x (build yyyy.mm.dd)"
         kaAppCount        = 1,        // 应用个数
         kaCmdCount        = 2,        // 命令个数
         kaConnCount       = 3,        // 连接个数
         kaDealThreads     = 4,        // 处理线程最大个数, 默认值: 16
         kaDealCacheSize   = 5,        // 处理线程缓冲池尺寸, 默认值: 16
         kaSendThreads     = 6,        // 发送线程最大个数, 默认值: 8
         kaSendCacheSize   = 7,        // 发送线程缓冲池尺寸, 默认值: 8

         // 扩展属性基数
         kaBaseAppObj      = 0x10000,  // 应用索引基数: 应用对象
         kaBaseAppName     = 0x20000,  // 应用索引基数: 应用名
         kaBaseConnObj     = 0x40000}; // 连接索引基数: 连接对象

// 应用的属性项
enum TRCKAppAttrib
        {kaaData           = 0,        // 自定义数据
         kaaName           = 1,        // 应用名
         kaaState          = 2,        // 应用的状态
         kaaPassword       = 3,        // 应用的密码
         kaaFuncCount      = 4,        // 应用的函数个数
         kaaConnCount      = 5,        // 应用的已连接数
         kaaMaxThreads     = 6,        // 应用的回调函数处理线程最大个数, 默认值: 8
         kaaMaxConnCount   = 7,        // 应用的最大连接个数, 默认值: 0 表示无限制

         // 回调事件属性, 取值范围: [32..63]
         kaaOnConnLogin    = 32,       // 应用的 OnConnLogin   事件, 连接登录(TRCKOnAppLogin)
         kaaOnConnLogout   = 33,       // 应用的 OnConnLogout  事件, 连接登出(TRCKOnAppLogout)
         kaaOnExecResp     = 34,       // 应用的 OnExecResp    事件, 执行应答(TRCKOnAppResp)
         kaaOnRespCancel   = 35,       // 应用的 OnRespCancel  事件, 应答已取消(TRCKOnAppResp)
         kaaOnRespConfirm  = 36,       // 应用的 OnRespConfirm 事件, 应答已确认(TRCKOnAppResp)

         // 扩展属性基数
         kaaBaseFuncObj    = 0x10000,  // 应用的函数索引基数: 函数对象
         kaaBaseFuncName   = 0x20000,  // 应用的函数索引基数: 函数名
         kaaBaseConnObj    = 0x40000}; // 应用的连接索引基数: 连接对象

// 应用的状态
enum TRCKAppState
        {kasInactive       = 0,        // 函数未定义
         kasDefining       = 1,        // 函数正在定义
         kasDefined        = 2,        // 函数已定义
         kasClosing        = 3,        // 正在关闭
         kasOpening        = 4,        // 正在打开
         kasOpened         = 5};       // 已打开

// 函数的属性项
enum TRCKFuncAttrib
        {kfaData           = 0,        // 自定义数据
         kfaName           = 1,        // 函数名
         kfaActive         = 2,        // 函数是否已激活
         kfaAppObj         = 3,        // 函数所属应用对象
         kfaRetType        = 4,        // 函数返回值类型
         kfaRetSize        = 5,        //
从Kernel Panic到CUDA Kernel:深入解析操作系统内核的设计哲学与工程实践 内核(Kernel)是操作系统的核心组件,负责管理系统资源、提供硬件抽象层,并确保系统的安全与稳定运行。其核心原理在于通过划分用户空间与内核空间,利用CPU提供的不同特权级别(如Ring 0和Ring 3),实现对硬件和关键资源的受控访问。这种设计带来了显著的技术价值:它通过集中管理保障了系统安全,防止应用程序间的相互干扰;同时,通过减少不必要的上下文切换和权限检查,为需要直接硬件交互的任务(如GPU计算、网络包处理)提供了极致的性能基础。在应用场景上,无论是Linux的宏内核、VxWorks的微内核,还是 阅读详情

相关推荐

Poly Kernel Inception Network for Remote Sensing Detection

与传统的kb× b二维深度卷积相比,我们可以用几个一维深度卷积核实现类似的效果,参数约简为kb/2。其次,条形卷积可以方便地识别和提取细长形状物体的特征,比如桥梁。为了增加CAA模块在其所属的PKI块越深时的接受域,我们设置kb=11+2×l,即我们计算内核大小kb作为PKI块深度n的函数。以前的方法:通过扩大主干的空间接受野来解决这些挑战,要么通过大核卷积,要么通过扩张卷积。PKI模块是一个初始化风格的模块,它包括一个小核卷积来获取本地信息,然后是一组并行深度卷积来捕获跨多个尺度的上下文信息。

qq_54372122的博客 3158

电磁阀的符号解读

先数方框数量定“几位”(工作位置数 );数接口数量(P、A、R等 )定“几通”;看箭头、截断符号,结合常态位(弹簧侧/中间位 ),分析通电/断电时的通路切换;字母(P、A、R )、线圈(单/双电控 )、弹簧(复位 )辅助确认功能(如NO/NC对应常态通断 )。不同厂家符号细节(如编码、线圈画法 )有差异,遇到陌生符号,建议结合产品手册、品牌规范核对,就能精准读懂电磁阀的“语言”啦~

创新改变世界! 6890

从FSI到三层堆叠:一文搞懂车载CIS图像传感器技术演进与选型避坑

本文深入解析车载CIS图像传感器从FSI到三层堆叠的技术演进,揭示不同结构在低光性能、HDR表现和温度稳定性上的关键差异。通过实测数据对比,指导智能驾驶系统选型策略,帮助开发者规避成本与性能的常见陷阱,提升车载摄像头在复杂环境下的成像质量。

weixin_30689307的博客 100

Couldn‘t find device with uuid 恢复LVM元数据 linux

Couldn't find device with uuid 恢复LVM元数据 linux欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 欢迎使用Markdown编辑器 你好! 这是你第一次使

m0_57559579的博客 7166

MPC-CBF 控制原理详解

假设系统满足如下离散时间动力学模型xt1fxtutxt∈Xut∈Uxt1​fxt​ut​xt​∈Xut​∈Uxtx_txt​:状态变量,定义域为可行状态集X⊆RnX⊆Rnutu_tut​:控制输入,定义域为控制约束集U⊆RmU⊆Rm系统需满足安全约束,由如下控制障碍函数(CBF)hX→RhX→RCx∈X∣hx≥0C:=x∈X∣hx≥。

m0_54691290的博客 1179

HyperLynx实战:手把手教你搞定DDR4信号完整性仿真(附ODT与终端电阻配置避坑)

本文详细介绍了使用HyperLynx进行DDR4信号完整性仿真的实战技巧,重点解析了ODT配置与终端电阻优化的黄金法则。通过模型准备、拓扑构建、ODT扫描等关键步骤,帮助硬件工程师规避常见设计陷阱,提升高速数字电路设计的效率与可靠性。

weixin_30861797的博客 639

Python 爬虫实战:arXiv 学术论文 PDF 批量下载(含反爬策略与文件命名规范)

arXiv 是全球最大的免费开放预印本论文平台之一,涵盖物理学、数学、计算机科学等多个学科领域。研究人员、学生和工程师常常需要批量下载论文 PDF 进行文献综述、构建机器学习数据集或进行文本挖掘研究。然而,手动逐篇下载论文效率低下,因此开发一个自动化批量下载工具显得尤为重要。

yansideyucsdn的博客 1817

AI编程工具深度对比:Cursor、Copilot、Trae与Claude Code,2025年开发者该如何选择?

2025年AI编程工具市场已形成四大主力阵营:Cursor(AI原生IDE)、GitHub Copilot(行业标准)、Trae(中国免费方案)和Claude Code(终端交互)。核心差异体现在技术能力(代码生成准确率85%-95%)、智能体协作程度和上下文处理能力(8K-200K tokens)。用户体验方面,Trae对中文支持最佳且免费,Copilot企业集成强,Cursor平衡易用与功能,Claude Code适合高阶开发者。实际测试显示,不同工具在原型开发、算法实现等场景各有优势

fudaihb的博客 6496

configure: error: no acceptable C compiler found in $PATH解决方案

本文主要介绍了configure: error: no acceptable C compiler found in $PATH解决方案,希望能对使用Linux的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 4万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 并行处理之引用计数与状态的使用
下一篇: 远程调用内核接口的封装类(RCKObjs)
很土
博客等级 码龄25年 105粉丝 40原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值