69,371
社区成员
发帖
与我相关
我的任务
分享
void get_var(list<string> *var_list)
void get_var(char **var_list, int *size)
void get_var(char *var_list, int *size)
这个size就是字符串长度了struct
string_arr
{
string* string_;
size_t size;
};
void get_var( string_arr* string_list );
#include "stdafx.h"
#include <windows.h>
#include "winternl.h"
#include <stddef.h>
#define STATUS_SEVERITY_WARNING 0x2
#define STATUS_SEVERITY_SUCCESS 0x0
#define STATUS_SEVERITY_INFORMATIONAL 0x1
#define STATUS_SEVERITY_ERROR 0x3
char result[sizeof(SYSTEM_PROCESS_INFORMATION)*1000];
typedef NTSTATUS (WINAPI *NtQuerySystemInformationType)(
__in SYSTEM_INFORMATION_CLASS SystemInformationClass,
PVOID SystemInformation,
__in ULONG SystemInformationLength,
__out_opt PULONG ReturnLength
);
typedef struct _CLIENT_ID {
HANDLE UniqueProcess;
HANDLE UniqueThread;
} CLIENT_ID;
typedef CLIENT_ID *PCLIENT_ID;
typedef LONG KPRIORITY;
typedef enum _KWAIT_REASON {
Executive,
FreePage,
PageIn,
PoolAllocation,
DelayExecution,
Suspended,
UserRequest,
WrExecutive,
WrFreePage,
WrPageIn,
WrPoolAllocation,
WrDelayExecution,
WrSuspended,
WrUserRequest,
WrEventPair,
WrQueue,
WrLpcReceive,
WrLpcReply,
WrVirtualMemory,
WrPageOut,
WrRendezvous,
Spare2,
Spare3,
Spare4,
Spare5,
Spare6,
WrKernel,
MaximumWaitReason
} KWAIT_REASON;
struct _SYSTEM_THREADS
{
LARGE_INTEGER KernelTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER CreateTime;
ULONG WaitTime;
PVOID StartAddress;
CLIENT_ID ClientIs;
KPRIORITY Priority;
KPRIORITY BasePriority;
ULONG ContextSwitchCount;
ULONG ThreadState;
KWAIT_REASON WaitReason;
};
typedef struct _VM_COUNTERS {
SIZE_T PeakVirtualSize;
SIZE_T VirtualSize;
ULONG PageFaultCount;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
} VM_COUNTERS;
typedef VM_COUNTERS *PVM_COUNTERS;
struct _SYSTEM_PROCESSES
{
ULONG NextEntryOffset;
ULONG ThreadCount;
ULONG Reserved[6];
LARGE_INTEGER CreateTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER KernelTime;
UNICODE_STRING ProcessName;
KPRIORITY BasePriority;
ULONG ProcessId;
ULONG InheritedFromProcessId;
ULONG HandleCount;
ULONG Reserved2[2];
VM_COUNTERS VmCounters;
IO_COUNTERS IoCounters; //windows 2000 only
struct _SYSTEM_THREADS Threads[1];
};
struct _SYSTEM_PROCESSES_
{
ULONG NextEntryOffset; //下一个进程信息的偏移量,如果为0表示无一个进程信息
ULONG ThreadCount; //线程数量
ULONG Reserved[6]; //
LARGE_INTEGER CreateTime; //创建进程的时间
LARGE_INTEGER UserTime; //进程中所有线程在用户模式运行时间的总和
LARGE_INTEGER KernelTime; //进程中所有线程在内核模式运行时间的总和
UNICODE_STRING ProcessName; //进程的名字
int r[5];
};
int _tmain(int argc, _TCHAR* argv[])
{
int cnt = 0;
DWORD dwTran;
SYSTEM_INFORMATION_CLASS sic = SystemProcessInformation;
HMODULE Lib = LoadLibrary(_T("ntdll.dll"));
NtQuerySystemInformationType proc =
(NtQuerySystemInformationType) GetProcAddress(Lib, "NtQuerySystemInformation");
NTSTATUS rc = (*proc)(
sic,
result,
sizeof(SYSTEM_PROCESS_INFORMATION)*1000,
&dwTran);
if (rc != STATUS_SEVERITY_SUCCESS)
{
return 5;
}
_SYSTEM_PROCESSES * curr = (_SYSTEM_PROCESSES*)result;
while (curr)
{
++cnt;
_tprintf(_T("%d\t"), curr->ProcessId);
_tprintf(_T("%s\t"), curr->ProcessName.Buffer);
_tprintf(_T("%d\t"), curr->NextEntryOffset);
_tprintf(_T("%d\n"), curr->ThreadCount);
_tprintf(_T("%d\t"), (int)curr+offsetof(_SYSTEM_PROCESSES,Threads)+sizeof(_SYSTEM_THREADS) * curr->ThreadCount);
_tprintf(_T("%d\n"), (int)curr+curr->NextEntryOffset);
if (curr->NextEntryOffset)
{
if (curr->NextEntryOffset-offsetof(_SYSTEM_PROCESSES,Threads)-sizeof(_SYSTEM_THREADS) * curr->ThreadCount
> sizeof(_SYSTEM_PROCESSES))
{
_tprintf(_T("hide process\n"));
}
*(char**)&curr += curr->NextEntryOffset;
}
else
{
curr = NULL;
}
}
printf("total\t%d\n", cnt);
int it[256];
int temp;
// ReadProcessMemory(GetCurrentProcess(), (void*)0xffdff124, it,16, &dwTran);
for (unsigned int i = 0; i < 256; ++i)
{
unsigned addr = 0xffdf124+i;
__asm
{
mov eax, addr
mov temp, eax
}
it[i] = temp;
}
for (int i = 0, brk = 0; i < 1024; ++i)
{
_tprintf(_T("%02x"), *((unsigned char*)it + i));
if (!(++brk&0x1F)) _tprintf(_T("\n"));
}
_tprintf(_T("\n%d\n"), GetLastError());
getchar();
return 0;
}
#define STRING_LEN 64
#define VAR_NUM 10
// 返回变量个数
int get_var_num()
{
return VAR_NUM;
}
// 获取变量名称
void get_var(char *val_list[], int str_size[], int size)
{
for (int i = 0; i < size; ++i)
{
if (val_list && str_size && str_size[i] == STRING_LEN)
sprintf(val_list[i], "string%d", i);
if (str_size)
str_size[i] = STRING_LEN;
}
}
int main(int argc, char* argv[])
{
int n = get_var_num();
int *str_size = new int[n];
char **val_list = new char *[n];
vector<string> v;
v.resize(n);
get_var(NULL, str_size, n);
int i = 0;
for(vector<string>::iterator it = v.begin(); it != v.end(); ++it, ++i)
{
string &str = (*it);
str.reserve(str_size[i]);
val_list[i] = (char *)str.c_str();
}
get_var(val_list, str_size, n);
for(it = v.begin(); it != v.end(); ++it)
printf("vector item %s\n", (*it).c_str());
delete []str_size;
delete []val_list;
return 0;
}
int getsize(viod);
void get_var(char **var_list, int size[])
int get_var(char **var_list, int size[])