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

    C语言链表应用--基于Linux C多线程软件框架实现

    typedef unsigned short u16; typedef char s8 ; typedef int s32; typedef short s16; typedef char * pchar Find_Work_Name(_work headler,pchar work_name) ; //执行子任务----根据任务名称来执行 s32 Run_work_for_work_name(_work headler,pchar work_name) ; //销毁一个子任务 s32 Destroy_cwork(_work headler,pchar work_name); //销毁全部任务 _work headler,pchar work_name) ; //销毁一个子任务 s32 Destroy_cwork(_work headler,pchar work_name); //销毁全部任务 _work Find_Work_Name(_work headler,pchar work_name) { assert(headler !

    2.9K50发布于 2019-07-04
  • 驱动开发:内核监控进程与线程创建

    #include <ntddk.h>NTKERNELAPI PCHAR PsGetProcessImageFileName(PEPROCESS Process);NTKERNELAPI NTSTATUS PsLookupProcessByProcessId(HANDLE ProcessId, PEPROCESS *Process);PCHAR GetProcessNameByProcessId(HANDLE ProcessId){NTSTATUS st = STATUS_UNSUCCESSFUL;PEPROCESS ProcessObj = NULL;PCHAR string = NULL;st = PsLookupProcessByProcessId PEPROCESS Process);NTKERNELAPI NTSTATUS PsLookupProcessByProcessId(HANDLE ProcessId, PEPROCESS *Process);PCHAR GetProcessNameByProcessId(HANDLE ProcessId){NTSTATUS st = STATUS_UNSUCCESSFUL;PEPROCESS ProcessObj = NULL;PCHAR

    1.2K30编辑于 2022-12-20
  • 驱动开发:内核监控进程与线程创建

    #include <ntddk.h> NTKERNELAPI PCHAR PsGetProcessImageFileName(PEPROCESS Process); NTKERNELAPI NTSTATUS PsLookupProcessByProcessId(HANDLE ProcessId, PEPROCESS *Process); PCHAR GetProcessNameByProcessId(HANDLE ProcessId) { NTSTATUS st = STATUS_UNSUCCESSFUL; PEPROCESS ProcessObj = NULL; PCHAR string = NULL; PEPROCESS Process); NTKERNELAPI NTSTATUS PsLookupProcessByProcessId(HANDLE ProcessId, PEPROCESS *Process); PCHAR 检测线程需要调用PsSetCreateThreadNotifyRoutine 创建回调函数,然后就可以检测线程的创建了,具体代码如下: #include <ntddk.h> NTKERNELAPI PCHAR

    91520编辑于 2022-12-28
  • 来自专栏萌新的日常

    C++内存管理

    staticVar = 1; int localVar = 1; int num1[10] = { 1, 2, 3, 4 }; char char2[] = "abcd"; const char* pChar3 ___ pChar3在哪里?____ *pChar3在哪里?____ ptr1在哪里?____ *ptr1在哪里? : 是一个由const修饰的字符类型指针,指针指向的内容不能改变, 说明"abcd"是一个常量字符串,内容不能被修改,处于栈 *pchar3 :由于"abcd"是一个常量字符串,pchar3指向常量字符串 (num1)=40 - sizeof(char2):单独当在sizeof内部,数组名代表整个数组,abcd\0,sizeof(char2)=5 - sizeof(pChar3):pChar3是一个指针, 所以sizeof(pChar3)=4/8 strlen(pChar3):pChar3代表首元素地址,strlen为从给予的地址开始 到'\0'结束,strlen(pChar3)=4 - sizeof

    68940编辑于 2023-04-20
  • 来自专栏学习C/++

    C++奇迹之旅:C++内存管理的机制初篇

    _A pChar3在哪里?A *pChar3在哪里?D ptr1在哪里?A *ptr1在哪里? *pChar3:const char* pChar3 = "abcd"; 中的字符串字面量 "abcd" 存储在只读的数据段(常量区)中。 而pChar3 本身是一个指针变量,存储在栈上,它指向常量区中的字符串。由于字符串字面量是只读的,所以通过 *pChar3 我们只能读取字符串的内容,而不能修改它。 *pChar3 在栈中, pChar3 在代码段(常量区),指针变量 pChar3 存储在栈中,*pChar3 指向一个字符串常量,该字符串常量存储在代码段(常量区)中,代码段(常量区)用于存储程序中的常量数据 sizeof(pChar3) = 8; strlen(pChar3) = 4; pChar3 是一个指向字符串常量 "abcd" 的指针,在 32 位系统上,指针大小为 4 字节。

    75310编辑于 2024-05-06
  • 来自专栏编程基础

    C编程基础-基础篇 8

    printf("Before copy : %s\n", c); strcpy(c, a); printf("After copy : %s\n", c); char *pchar ; pchar = strchr(a, 'o'); printf("Character : %s\n", pchar); pchar = strstr(a, "our"); printf("String : %s\n", pchar); return 0; } string length = 20 Compare a to a : 0 Before copy :

    39531发布于 2021-02-26
  • 来自专栏微卡智享

    Delphi调用动态链接库

    入口函数为PosPayOperate function PosPayOperate(OpType: Integer; const InPara: PChar; OutPara, OutMsg: PChar SMCzkYw_DLL = 'PosPayIntf.dll'; //调用动态库名称 function PosPayOperate(OpType: Integer; const InPara: PChar ; OutPara, OutMsg: PChar): Integer; export; stdcall; ? 然后在implementation下面加入 function PosPayOperate(OpType: Integer; const InPara: PChar; OutPara, OutMsg: PChar): Integer; external POSPAY_DLL; ?

    3.2K20发布于 2019-07-25
  • 来自专栏嵌入式开发圈

    为什么很多人编程喜欢用typedef?

    1.3 typedef 与指针的结合使用 typedef char * PCHAR; int main (void) { //char * str = "学嵌入式"; PCHAR str = "学嵌入式"; printf ("str: %s\n", str); return 0; } 在上面的demo程序中,PCHAR 的类型是 char *,我们使用PCHAR类型去定义一个变量str typedef char* PCHAR1; #define PCHAR2 char * int main (void) { PCHAR1 pch1, pch2; PCHAR2 pch3, pch4 p1 = &b; //宏展开后是一个常量指针 const char * p1 = &b; //其中const与类型char的位置可以互换 而在使用PCHAR2定义的变量p2中,PCHAR2作为一个类型 const PCHAR2 p2 = &b; //PCHAR2此时作为一个类型,与const可互换位置 PCHAR2 const p2 = &b; //该语句等价于上条语句 char * const p2

    3K20发布于 2020-05-21
  • 来自专栏方亮

    使用APIHOOK实现进程隐藏

    // 保存后一个数据块的“下个数据偏移” ULONG ulAfterNextEntryOffset = ulNextEntryOffset; // 保存前一个数据块的起始地址 PCHAR pchBeforeAddr = (PCHAR) lpSystemInformation; // 保存当前数据块的起始地址 PCHAR pchCurrentAddr = (PCHAR) lpSystemInformation ; // 保存下个数据块的起始地址 PCHAR pchNextAddr = pchCurrentAddr; BOOL bidle = TRUE; while( 0 ! ulNextEntryOffset, sizeof(ULONG), (PVOID)pchNextAddr, sizeof(ULONG) ); // 指向每个数据块中进程名的指针 PCHAR ), sizeof(PCHAR)); if( 0 == wcscmp( (PWCHAR)(pchNameAddr), L"BackRun.exe")) {

    1.3K21发布于 2019-01-16
  • 来自专栏Eureka的技术时光轴

    delphi使用bcb的c++ .obj .o,lazarus x64内联汇编,att和intel

    RegMust: PChar; // Internal use only. end; function _regcomp(exp: PChar): PRegExp; cdecl; function _regexec(prog: PRegExp; str: PChar): LongBool ; C: Integer): PChar; cdecl; begin Result := StrScan(S, Chr(C)); end; function _strncmp(S1, S2: PChar const S: PChar; C: Integer): PChar; cdecl; external 'msvcrt.dll' name 'strchr'; function _strncmp( Examples: 1 2 3 4 5 function _sprintf(S: PChar; const Format: PChar): Integer; cdecl; varargs; external

    3.9K21发布于 2019-07-24
  • 来自专栏学习成长指南

    C++内存管理(2)+模版初阶

    num1指定了数组的大小空间是容纳的10个数据,但是这个char2虽然没有指定数组里面的元素的个数,但是这个数组同样是局部的,位于栈区;实际上char2右边有几个字符加上斜杠0就开辟多大的空间; (6)对于pchar3 和ptr1而言,我们的pchar3虽然是const进行修饰,这个只能说明这个字符串是常量字符串,是不可以进行修改的,常量字符串位于常量区,但是这个pchar3指针同样是局部的,位于栈区; (7)请看下面的图片 pchar3和ptr1都在栈区,但是其指向的数据不在栈区,pchar3指向的数据位于常量区域,属于常量字符串;ptr1指向的区域在堆区,因为ptr1属于是动态开辟的空间,我们之前已经提及到过动态开辟的空间都是在堆区上面的 ; (8)因此对pchar3进行解引用,就会找到常量区里面的常量字符串,8pchar3属于常量区域,对于ptr1进行解引用就会找到堆区上面动态开辟的空间,因此*ptr1属于堆区; char2就不一样了,

    20000编辑于 2025-02-24
  • 来自专栏软件工程

    438. 找到字符串中所有字母异位词

    } //s链表 int[] sChar=new int[26]; //标准窗口(比对项) int[] pChar for (int i = 0; i < pLen; i++) { sChar[s.charAt(i)-'a']++; pChar } //初始化的窗口是否相同,这里提前判断,让后面的for的判断聚焦于窗口尾部 if (Arrays.equals(sChar,pChar sChar[s.charAt(i)-'a']++; //窗口比对,check过程 if (Arrays.equals(sChar,pChar

    38620编辑于 2021-12-27
  • 驱动开发:实现驱动加载卸载工具

    pSysPath, PCHAR pServiceName, PCHAR pDisplayName){m_pSysPath = pSysPath;m_pServiceName = pServiceName DeleteService(m_hService)){m_dwLastError = GetLastError();return FALSE;}return TRUE;}// 打开驱动BOOL Open(PCHAR OutBuffLen, &dw, NULL);if (RealRetBytes)*RealRetBytes = dw;return b;}private:// 获取服务句柄BOOL GetSvcHandle(PCHAR i >= 0; i--){if (szCurFile[i] == '\\'){szCurFile[i + 1] = '\0';break;}}}public:DWORD m_dwLastError;PCHAR m_pSysPath;PCHAR m_pServiceName;PCHAR m_pDisplayName;HANDLE m_hDriver;SC_HANDLE m_hSCManager;SC_HANDLE

    2.8K20编辑于 2022-11-20
  • 来自专栏技术杂记

    Windows Kernel-内核重载(NTOS)

    PRTL_PROCESS_MODULES psmi = NULL; ULONG ulSize = 0; ULONG ulIndex = 0; // 转换 PCHAR = GetModuleInfo((PCHAR)((PUCHAR)pBase+pImport->Name), &ModBase)) { return STATUS_UNSUCCESSFUL; } KdPrint(("[BuildNtosImportTable]-ModName:%s, ModBase:%p\n",(PCHAR)((PUCHAR)pBase+pImport->Name), pBaseReloc->SizeOfBlock-sizeof(IMAGE_BASE_RELOCATION))/sizeof(USHORT); PUSHORT pItem = (PUSHORT)((PCHAR IMAGE_REL_BASED_HIGHLOW: case IMAGE_REL_BASED_DIR64: { pRelocTarget = (PULONG_PTR)((PCHAR

    20.9K373发布于 2020-06-18
  • 来自专栏学习

    C/C++中哪些数据存放于栈区、堆区、静态区、常量区的详细说明

    pChar3在哪里? 选项:A. 栈 指针 pChar3 是局部变量,在栈上分配。 *pChar3在哪里? 选项:D. 代码段(常量区) pChar3 指向的是一个字符串常量 “abcd”,而字符串常量存储在代码段(常量区)。 ptr1在哪里? 选项:A. 栈 指针 ptr1 是局部变量,存储在栈上。 sizeof(pChar3) = 8(在 64 位系统上) pChar3 是一个指针,在 64 位系统上,指针的大小是 8 字节。如果是 32 位系统,则为 4 字节。 strlen(pChar3) = 4 pChar3 指向字符串常量 “abcd”,strlen(pChar3) 返回 4。

    1.4K10编辑于 2024-09-23
  • 来自专栏jiajia_deng

    typedef 与

    众所周知,typedef与#define都可以将系统关键字定义为一个其他名字来使用,方便我们记忆,比如 #define PCHAR char* 与 typedef char* PCHAR;,两种方式定义出来的 PCHAR都可以用来定义新的变量。

    33020编辑于 2023-10-20
  • 来自专栏全栈程序员必看

    C++字符串加密_c++字符串连接函数

    ); return; } void UnicodeToUTF_8(char* pOut, WCHAR* pText) { // 注意 WCHAR高低字的顺序,低字节在前,高字节在后 char* pchar = (char *)pText; pOut[0] = (0xE0 | ((pchar[1] & 0xF0) >> 4)); pOut[1] = (0x80 | ((pchar[1] & 0x0F) < < 2)) + ((pchar[0] & 0xC0) >> 6); pOut[2] = (0x80 | (pchar[0] & 0x3F)); return; } string utf8_uri(string

    1.6K30编辑于 2022-11-17
  • 4.4 Windows驱动开发:内核监控进程与线程创建

    PPS_CREATE_NOTIFY_INFO不等于NULL则说明该进程是被创建了,反之则说明进程是退出了,有了这些基础知识那么实现监视进程加载将变得很容易,如下案例所示;#include <ntddk.h>NTKERNELAPI PCHAR PEPROCESS Process);NTKERNELAPI NTSTATUS PsLookupProcessByProcessId(HANDLE ProcessId, PEPROCESS *Process);PCHAR GetProcessNameByProcessId(HANDLE ProcessId){ NTSTATUS st = STATUS_UNSUCCESSFUL; PEPROCESS ProcessObj = NULL; PCHAR CreationStatus中的参数修改为STATUS_UNSUCCESSFUL这意味着对象的创建过程未成功完成,从而实现拒绝进行执行的目的;#include <ntddk.h>NTKERNELAPI PCHAR PEPROCESS Process);NTKERNELAPI NTSTATUS PsLookupProcessByProcessId(HANDLE ProcessId, PEPROCESS *Process);PCHAR

    1.2K40编辑于 2023-11-18
  • 来自专栏C / C++

    动态开辟改朝换代——C++内存管理的革新:从malloc/free到new/delete的范式转换

    staticVar = 1; int localVar = 1; int num1[10] = { 1, 2, 3, 4 }; char char2[] = "abcd"; char* pChar3 ___ pChar3在哪里?____ * pChar3在哪里?____ ptr1在哪里?____ * ptr1在哪里? __A__ pChar3在哪里?__A__ *pChar3在哪里?__D__ ptr1在哪里?__A__ *ptr1在哪里? __B__ 解析: char2局部变量在栈区; char2是一个数组,把后面常量串拷贝过来到数组中,数组在栈上,所以*char2在栈上; pChar3局部变量在栈区; *pChar3得到的是字符串常量字符在代码段 sizeof(pChar3) = __4__; 解析:pChar3为指针。 strlen(pChar3) = __4__; 解析:字符串“abcd”的长度,不包括\0的长度。

    32410编辑于 2025-11-17
  • 来自专栏猿人谷

    对称字符串的最大长度

     = pString;   while(*pChar ! = '\0')       {   //substring with odd length(奇数) char *pFirst = pChar - 1;   char *pLast = pChar             symmeticalLength = newLength;   //substring with even length(偶数)         pFirst = pChar ;           pLast = pChar + 1;   while(pFirst >= pString && *pLast ! pFirst - 1;   if(newLength > symmeticalLength)               symmeticalLength = newLength;           pChar

    4.7K80发布于 2018-01-17
领券