首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏OpenLinyou

    OpenThread是世界上最舒心的跨平台多线程并发库

    OpenThread OpenThread是最舒心的跨平台多线程并发库,多线程三大设计模式: Await模式, Factory模式和Actor模式。 源代码:https://github.com/OpenMiniServer/openthread #克隆项目 git clone https://github.com/OpenMiniServer/openthread /helloworld 全部源文件 src/openthread.h src/openthread.cpp 技术特点 OpenThread的技术特点: 跨平台设计,提供Linux统一的pthread接口 ::START) { printf("Hello OpenThread\n"); //睡眠1秒钟 OpenThread::Sleep(1000); dog和cat auto dog = OpenThread::Create("dog", Test2ThreadDog); auto cat = OpenThread::Create("

    1.3K00编辑于 2023-07-20
  • 来自专栏OpenLinyou

    OpenSocket是Linux和安卓用epoll、Win32用IOCP、iOS和Mac用kqueue的高性能网络库

    结合OpenThread使用,可以轻轻构建在任意平台(包括移动平台)构建高性能并发服务器。简单的Socket通信使用OpenThread创建3条线程:listen,accept和client。 ::START) { //等待accept线程启动完,才继续执行 while (OpenThread::ThreadId("accept") < 0) OpenThread while (OpenThread::ThreadId("accept") < 0) OpenThread::Sleep(100); //连接服务器ip和端口,并把fd与客户端线程绑定,fd OpenThread::Create("listen", ListenThread); OpenThread::Create("accept", AcceptThread); OpenThread OpenThread::ThreadJoinAll(); printf("Pause\n"); return getchar();}2.HttpClient使用OpenThread的Worker

    1.6K00编辑于 2023-03-09
  • 来自专栏OpenLinyou

    OpenSocket是跨全平台的高性能高并发网络库

    结合OpenThread使用,可以轻轻在任意平台(包括移动平台)构建高性能并发服务器。 OpenThread可实现三大多线程设计模式。 支持IPv6,小巧迷你,配合OpenThread的多线程三大设计模式,轻轻实现高性能网络。 1.HelloWorld 使用OpenThread创建3条线程:listen,accept和client。 ::START) { //等待accept线程启动完,才继续执行 while (OpenThread::ThreadId("accept") < 0) OpenThread while (OpenThread::ThreadId("accept") < 0) OpenThread::Sleep(100); //连接服务器ip和端口,并把fd与客户端线程绑定, OpenThread::Create("listen", ListenThread); OpenThread::Create("accept", AcceptThread); OpenThread

    1.5K20编辑于 2023-07-20
  • 来自专栏OpenLinyou

    OpenMiniServer是一个超迷你、 超易用的C++高并发跨平台服务器框架

    OpenThread实现了Actor模式,大大简化了服务器业务逻辑的开发,可以轻松实现多核支持。 技术架构 线程处理 OpenThread采用固定大小线程池实现高效线程管理。 结合智能指针的线程安全特性,实现了OpenThread对象的无锁访问。 每个OpenThread对象在创建启动时,会创建一条线程并加入线程池中,以便统一管理该线程及其业务逻辑。 服务器计算业务根据CPU负载进行拆分,分发到多个OpenThread对象上,从而实现多核处理。 OpenThread通过条件锁实现线程间安全通信,构建Actor模型。 多个OpenThread对象通过线程通信进行协作,处理复杂业务逻辑,实现简化开发工作,应对服务器高压处理业务需求。 OpenServer类是OpenMiniServer的核心类,它继承OpenThread,在OpenThread的基础上按照Actor模型进一步封装设计,提供更多便利的统一的接口。

    98120编辑于 2023-07-20
  • 来自专栏OpenLinyou

    用OpenSocket开发一个简单的高性能高并发HttpServer

    为了开发方便,我们使用OpenThread作为线程库。使用OpenThread的Actor模式设计高并发HttpServer。 include <map> #include <set> #include <memory> #include <string.h> #include "opensocket.h" #include "open/openthread.h OpenThread::Send((int)msg->uid_, proto)) printf("SocketFunc dispatch faild pid = %lld while (listenId_ < 0) { listenId_ = ThreadId("listener"); OpenThread 0; i < vectServer.size(); ++i) vectServer[i]->start(); printf("wait close==>>\n"); OpenThread

    53200编辑于 2023-07-20
  • 来自专栏OpenLinyou

    OpenHttps是跨全平台的Actor模式、组件设计的高性能、高并发的超轻量、超迷你的Https框架

    std::shared_ptr<OpenMsgProto>(new OpenMsgProto); proto->msg_ = protoMsg; bool ret = OpenThread { for (size_t i = 0; i < clients_.size(); i++) { ret = OpenThread clients_.size()) balance_ = 0; OpenServer* client = clients_[balance_++]; ret = OpenThread std::shared_ptr<OpenMsgProto>(new OpenMsgProto); proto->msg_ = protoMsg; bool ret = OpenThread msg->handle_ = &OnOpenHttpHandle; HttpApp::Instance().httpServer(msg); //httpclient OpenThread

    80940编辑于 2023-07-20
  • 来自专栏红队蓝军

    通过硬件断点对抗hook检测

    思路 我们首先明确一下思路,我们知道硬件断点是基于线程的,因为每个线程的CONTEXT结构是不同的,这里首先就需要找到我们要修改dr寄存器的线程,也就是我们要hook的检测线程,找到线程之后我们通过OpenThread SetUnhandledExceptionFilter去注册一个异常处理函数,注册完成之后就可以更改dr寄存器的值来触发访问/写入/执行断点,然后再通过SetThreadContext放到CONTEXT结构里面即可 规避检测 那么这里先找到OpenThread 和MessageBoxA在内存中的地址 g_fnOpenThread = (FNOPENTHREAD)::GetProcAddress(LoadLibrary("kernel32.dll"), "OpenThread thread_entry32.th32OwnerProcessID, thread_entry32.th32ThreadID); OutputDebugString(szBuffer); 然后通过内存中定位的OpenThread

    1.6K40编辑于 2022-04-20
  • 7.6 实现进程挂起与恢复

    并通过遍历进程的方式寻找是否符合我们所需要枚举的进程名,如果是则调用CreateToolhelp32Snapshot并通过传入TH32CS_SNAPTHREAD代表枚举线程,通过循环的方式遍历进程内的线程,每次通过调用OpenThread te32.th32OwnerProcessID == process.th32ProcessID) { // 打开线程 HANDLE hThread = OpenThread 当有了上述两个函数的支持那么挂起线程将变得很容易实现了,首先后去所有进程快照,接着就是直接打开OpenThread()符合要求的线程,此时只需要调用SuspendThread(hThread)即可挂起一个线程 te32.th32ThreadID) { // 打开线程 HANDLE hThread = OpenThread hSnapshot, &te)) { if (te.th32OwnerProcessID == dwProcessID) { HANDLE hThread = OpenThread

    1K20编辑于 2023-09-24
  • 来自专栏OpenLinyou

    跨全平台高性能HttpClient尝试用OpenSocket开发设计

    为了开发方面,我们使用OpenThread作为线程库。OpenThread可以实现多线程三大设计模式,开发这个HttpClient,使用Worker模式。 include <assert.h> #include <time.h> #include <math.h> #include <map> #include <string.h> #include "open/openthread.h OpenThread::Send((int)msg->uid_, proto)) printf("SocketFunc dispatch faild pid = %d\n = std::shared_ptr<TaskProto>(new TaskProto); proto->request_ = request; bool ret = OpenThread

    1.4K00编辑于 2023-07-20
  • 来自专栏红队蓝军

    通过硬件断点对抗hook检测

    思路 我们首先明确一下思路,我们知道硬件断点是基于线程的,因为每个线程的CONTEXT结构是不同的,这里首先就需要找到我们要修改dr寄存器的线程,也就是我们要hook的检测线程,找到线程之后我们通过OpenThread SetUnhandledExceptionFilter去注册一个异常处理函数,注册完成之后就可以更改dr寄存器的值来触发访问/写入/执行断点,然后再通过SetThreadContext放到CONTEXT结构里面即可 规避检测 那么这里先找到OpenThread 和MessageBoxA在内存中的地址 g_fnOpenThread = (FNOPENTHREAD)::GetProcAddress(LoadLibrary("kernel32.dll"), "OpenThread thread_entry32.th32OwnerProcessID, thread_entry32.th32ThreadID); OutputDebugString(szBuffer); 然后通过内存中定位的OpenThread

    1.6K10编辑于 2022-05-17
  • 7.6 实现进程挂起与恢复

    并通过遍历进程的方式寻找是否符合我们所需要枚举的进程名,如果是则调用CreateToolhelp32Snapshot并通过传入TH32CS_SNAPTHREAD代表枚举线程,通过循环的方式遍历进程内的线程,每次通过调用OpenThread th32OwnerProcessID == process.th32ProcessID) { // 打开线程 HANDLE hThread = OpenThread 当有了上述两个函数的支持那么挂起线程将变得很容易实现了,首先后去所有进程快照,接着就是直接打开OpenThread()符合要求的线程,此时只需要调用SuspendThread(hThread)即可挂起一个线程 te32.th32ThreadID) { // 打开线程 HANDLE hThread = OpenThread hSnapshot, &te)) { if (te.th32OwnerProcessID == dwProcessID) { HANDLE hThread = OpenThread

    90540编辑于 2023-10-11
  • 10.1 调试事件读取寄存器

    ; break; } } 异常事件会被流转到OnException(DEBUG_EVENT* pDebug, BYTE* bCode)函数内,在本函数内我们首先通过使用OpenProcess/OpenThread HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pDebug->dwProcessId); HANDLE hThread = OpenThread

    35120编辑于 2023-10-11
  • 来自专栏信安成长计划

    Bypass BeaconEye - Beacon 堆混淆

    te.th32OwnerProcessID == targetProcessId) { HANDLE thread = ::OpenThread te.th32OwnerProcessID == targetProcessId) { HANDLE thread = ::OpenThread

    1.7K10编辑于 2022-03-03
  • 来自专栏逆向技术

    win32线程

    hThread ); 4.ResumeThread 恢复线程执行 DWORD ResumeThread( HANDLE hThread 传入要恢复线程执行的线程句柄 ); 5.获取线程句柄 OpenThread HANDLE OpenThread( DWORD dwDesiredAccess, 访问权限 BOOL bInheritHandle, 是否可以继承 DWORD

    83510发布于 2018-09-28
  • 10.1 调试事件读取寄存器

    dwCC_Count++; break; }}异常事件会被流转到OnException(DEBUG_EVENT* pDebug, BYTE* bCode)函数内,在本函数内我们首先通过使用OpenProcess/OpenThread HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pDebug->dwProcessId); HANDLE hThread = OpenThread

    36720编辑于 2023-10-04
  • 来自专栏白帽子安全笔记

    免杀360火绒defender小型项目改

    handle to the main thread DWORD mainThreadId = GetCurrentThreadId(); HANDLE mainThreadHandle = OpenThread WriteProcessMemory"); OpenThreadFunc OpenThreadPtr = (OpenThreadFunc)GetProcAddress(hKernel32, "OpenThread WriteProcessMemory"); OpenThreadFunc OpenThreadPtr = (OpenThreadFunc)GetProcAddress(hKernel32, "OpenThread

    37510编辑于 2024-10-28
  • 来自专栏全栈程序员必看

    DLL注入

    WriteProcessMemory(hProcess, p, buffer, sizeof(buffer), nullptr); for (const auto& tid : tids) { printf("OpenThread \n"); HANDLE hThread = ::OpenThread(THREAD_SET_CONTEXT, FALSE, tid); if (hThread) { printf

    1.1K20编辑于 2022-08-30
  • 来自专栏鸿鹄实验室

    DLL injection

    hProcess, p, buffer, sizeof(buffer), nullptr); for (const auto& tid : tids) { printf("OpenThread \n"); HANDLE hThread = ::OpenThread(THREAD_SET_CONTEXT, FALSE, tid); if (hThread)

    2.8K40发布于 2021-10-12
  • C/C++ 修改EIP实现DLL注入

    ( hProcess <= 0 ) { MessageBox( NULL, L"未获取进程句柄", L"失败", MB_OK ); return; } HANDLE hThread = OpenThread

    1.3K30编辑于 2022-12-28
  • C/C++ 获取线程入口地址模块等

    YY.exe if(te32.th32OwnerProcessID == process.th32ProcessID){ // 打开线程 HANDLE hThread = ::OpenThread

    77420编辑于 2022-12-28
领券