远程调用内核接口(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

BUUCTF逆向题Youngter-drive

其实线程一代码我自己也不大理解,看了正确的 flag 后,我自己推出来的是这样:在 couece 中取出字符,然后在 QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm 中找出一样的,取出该字符在 QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm 中的下标,如果取出的字符是大写则 在ASCII中找出【下标 - 38】值对应的字符替换couece中的字符,同理,小写就减 96。

于高山之巅,方见大河奔涌;于群峰之上,更觉长风浩荡。 1090

PCIe ATS介绍

主机侧使用IOMMU完成设备地址到物理memory地址的转换,以及设备访问权限的检查。但如果所有PCIe设备都在进行DMA操作,则TA(Translation Agent)和ATPT(Address Translation and Protection Table)则会成为瓶颈,从而影响系统的latency。

maxwell2ic的博客 6021

APO的全面进化之路(2):走向IBP、建设端到端供应链计划体系

前一篇记录阐述了在供应链计划(Supply Chain Planning)领域里SAP的关键产品APO的不断进化之路,即部分产品从APO进化到S/4HANA,本篇将继续阐述进化之路上的另一大中坚产品力量SAP-IBP(Integrated Business Planning)。作为SAP数字化供应链(Digital Supply Chain)中供应链计划SCP的左膀右臂,S/4HANA与IBP共同完善了计划域的完整闭环。本篇作为收尾,在先谈对IBP产品的个人认知之前,特别是在当今这个IT产品迭代多、技术革新

ChampaignWolf的专栏 5227

13、数据可视化与分组操作:Danfo.js 实战指南

本文深入介绍了如何使用 Danfo.js 进行数据可视化与分组操作。内容涵盖多种图表的创建与配置,如折线图、散点图、箱线图、小提琴图、直方图和柱状图,并结合 Plotly.js 实现丰富的交互式可视化效果。同时,详细讲解了数据聚合的‘分割-应用-组合’模式,包括分组数据、遍历分组、apply 方法及 agg 聚合操作,帮助开发者高效处理和分析结构化数据。适用于 Dnotebook、HTML 及主流前端框架的应用场景。

o1p2q3r的博客 98

车载网络测试实操源码_使用CAPL脚本实现安全访问解锁,并模拟各种测试场景

在车载诊断中,我们经常会使用到安全访问解锁,常见的场景包括软件刷写前、通过2E服务写入某个DID前、通过31服务执行某个例程前等,都必须先通过27服务进行安全访问,解锁相应安全等级后才能执行上述操作。在开发调试或测试时,有时候需要模拟正常的安全解锁、安全访问秘钥错误、连续多次请求安全访问等,手动操作极为不便。本文将介绍如何使用CAPL脚本实现安全访问解锁,并模拟各种测试场景。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1200

蓝牙功耗优化实战:连接蓝牙耳机时高耗电问题的深度排查与解决

连接任意一款蓝牙耳机, 进行插入实网SIM卡, 同时连接蓝牙耳机后, 进入IDLE模式, 测试时间为10分钟的测试结果, 平均电流毫安在8左右. 测试结果1: 平均电流 8.84mA 测试结果2: 平均电流 7.39mA 厘清问题: 由于出现上两幅图中 绿色线圈中的 20mA 左右高耗电时段, 从而将整体的平均电流抬高. 于是在记录IDLE下电流出现绿色线圈中的 20mA 左右高耗电时段, 同时录制UART1 Catcher log. Filter: MOD_BT/MOD_ATC.

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 1001

第9.3章 从CMake基础到自动驾驶实战:构建跨平台C/C++项目的全能指南

《CMake构建实战:项目开发卷》精要指南 本文系统梳理了许宏旭《CMake构建实战》核心内容,涵盖C++构建全流程: 基础构建:详解MSVC/GCC编译器使用、Makefile编写及静态/动态库构建方法 CMake核心:解析语法结构、变量控制、文件操作等关键命令,阐述项目全生命周期管理 实战应用:通过快速排序、手写数字识别项目演示现代CMake实践,特别针对自动驾驶领域给出多传感器融合、SLAM等场景的CMake配置方案 特色价值:本书填补了官方文档实例不足的空白,提供300+代码示例,是掌握工业级C++

行知SLAM 1343

基于simulink的AI融合与深度学习控制的场景实例:基于强化学习的电动汽车能量管理策略优化仿真

本文介绍了基于强化学习的电动汽车能量管理策略优化仿真方法。通过Simulink构建包含驾驶循环输入、电池子系统、电机驱动系统和强化学习控制器的仿真模型,采用DQN等算法训练智能代理,设计奖励函数优化能量分配。详细说明了建模步骤和参数设置,包括环境定义、代理训练和性能评估指标。该方法能有效提升电动汽车的续航里程、电池寿命和能源利用效率,为智能能量管理系统设计提供参考。

xiaoheshang_123的博客 153

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

假人有限元模型

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

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值