- 博客(36)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
原创 windbg下查看应用层ntdll!NtOpenProcess
//查看进程explorer.exe信息!process 0 0 explorer.exe//切换到进程.process /p 81ff0020 //加载符号.reload//查看应用程ntdll模块中NtOpenProcess u ntdll!NtOpenProcess
2016-06-29 20:09:14 1294
原创 !process 不能使用解决
.sympath srv*E:\Symbols*http://msdl.microsoft.com/download/symbolslkd> !processNT symbols are incorrect, please fix symbols=====>1. 若符号存在E:\Symbols,输入命令:.sympath srv*E:\Symbols*http://msdl.mi
2016-06-29 13:51:06 2046 1
原创 calc_ctl_code
#include #include #include #define FILE_DEVICE_UNKNOWN 0x00000022#define METHOD_BUFFERED 0#define FILE_ANY_ACCESS 0//#define IOCTL_TEST CTL_CODE(F
2016-06-29 09:46:52 420
原创 windbg下EPROCESS获取进程加载模块
//查看指定的进程信息kd> !process 0 0 explorer.exePROCESS 88adb2b0 SessionId: 1 Cid: 0534 Peb: 7ffdd000 ParentCid: 0520 DirBase: 3eb99280 ObjectTable: 8c033088 HandleCount: 674. Image: explore
2016-06-28 15:15:03 2707
原创 Dll注入技术之APC注入
APC注入的原理是利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,其具体流程如下: 1)当EXE里某个线程执行到SleepEx()或者WaitForSingleObjectEx()时,系统就会产生一个软中断。 2)当线程再次被唤醒时,此线程会首先执行APC队列中的被注册的函数。 3)利用QueueUserAPC
2016-06-27 15:53:51 794
原创 通过符号文件获取函数地址
//通过符号文件获取函数地址#include #include #include #include #include "ntdll.h"#pragma comment(lib,"dbghelp.lib")//获取函数地址PDBULONG_PTR GetFunctionAddressPDB(HMODULE hMod, const WCHAR * szApiName){
2016-06-27 15:51:29 3461
原创 正确的加载自己写的dll
怎么能让程序正确的加载自己写的dll(1)把dll放在程序的debug目录下,在进行关联。(2)直接把DLL放在c:\windows\system目录下(3)添加环境变量 a,system(set Path = %Path%d:\\mydll); b,BOOL WINAPI SetDlldirctory(LPCTSTR LpPathName); 顺便给自己补充一下环境变量
2016-06-27 11:36:31 1139
原创 隐藏 LoadLibrary() 函数
#include typedef struct _UNICODE_STRING { // UNICODE_STRING structure USHORT Length; USHORT MaximumLength; PWSTR Buffer;} UNICODE_STRING;typedef UNICODE_STRING *PUNICODE_STRING;typedef NTST
2016-06-27 11:31:36 449
原创 CHtmlDialog(VC)
目录CHtmlDialog 对话框与普通对话框的区别事件处理映射宏DDX 宏C++ 与 javaSript 的相互调用CDHtmlDialog 中 html 资源加载 css 样式,js 脚本,图片CHtmlDialog 对话框与普通对话框的区别目前发现了四点(可能还有更多):类的继承关系class CTestHtmlDialogDlg : public CDHtmlDial
2016-06-21 17:22:52 1157 1
原创 线程池
线程池的功能以异步的方式来调用一个函数每隔一段时间调用一个函数当内核对象触发的时候调用一个函数当异步 I/O 请求完成的时候调用一个函数注意当一个进程初始化的时候,它并没有任何与线程池的开销.但是,一旦调用了新的线程池函数,系统就会为进程相应的内核资源,其中的一些资源在进程终止之前都将一直存在.正如我们可以看到,使用线程池的开销取决于用法:系统会以进程的名义来分配线程,其他
2016-06-21 17:02:52 455
原创 mysql
mysql的常用信息函数mysql -p #root用户登陆mysqlselect version(); #查询当前数据库服务器版本信息select user(); #查询当前用户select curdate(); #查询当前日期select curtime(); #查询当前时间select now(); #查询当前日期时间show tables
2016-06-19 12:34:21 263
原创 dump
dump.h#ifndef DUMP_HEAD_FILE#define DUMP_HEAD_FILE#pragma once#include #include #include #include #include #include #pragma comment(lib, "dbghelp.lib")#pragma warning(disable:4996) #
2016-06-18 20:25:25 639
原创 fork函数相关总结
fork的作用是根据一个现有的进程复制出一个新进程,原来的进程称为父进程(Parent Process),新进程称为子进程(Child Process)。系统中同时运行着很多进程,这些进程都是从最初只有一个进程开始一个一个复制出来的。在Shell下输入命令可以运行一个程序,是因为Shell进程在读取用户输入的命令之后会调用fork复制出一个新的Shell进程,然后新的Shell进程调用exec执行
2016-06-18 17:21:58 351
原创 linux系统编程之文件与I/O(五):fcntl 函数与文件锁
#include#include#include#include#include#include#include#include#define ERR_EXIT(m) \ do { \ perror(m); \ exit(EXIT_FAILURE); \ } while(0)int main(int argc, char *a
2016-06-18 15:30:45 415
原创 linux系统编程之文件与I/O(四):文件的属性
#include#include#include#include#include#include#include#include#define ERR_EXIT(m) \ do { \ perror(m); \ exit(EXIT_FAILURE); \ } while(0)#define MAJOR(a) (int)((uns
2016-06-18 15:07:15 436
原创 linux系统编程之文件与I/O(三):目录的操作
一、目录的访问功能说明:打开一个目录原型:DIR* opendir(char *pathname);返回值:打开成功,返回一个目录指针打开失败,则返回NULL功能说明:访问指定目录中下一个连接的细节原型:struct dirent* readdir(DIR *dirptr);返回值:返回一个指向dirent结构的指
2016-06-18 15:03:42 363
原创 linux系统编程之文件与I/O(二):文件的读取写入
文件的随机读写到目前为止的所有文件访问都是顺序访问。这是因为所有的读和写都从当前文件的偏移位置开始,然后文件偏移值自动地增加到刚好超出读或写结束时的位置,使它为下一次访问作好准备。有个文件偏移这样的机制,在Linux系统中,随机访问就变得很简单,你所需做的只是将当前文件偏移值改变到有关的位置,它将迫使下一次read()或write()发生在这一位置。(除非文件打开时标志有 O_APPE
2016-06-18 15:00:29 863
原创 linux系统编程之文件与I/O(一):文件的打开关闭
一、文件描述符对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的。当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数)。后续对文件的操作只需通过该文件描述符,内核记录有关这个打开文件的信息(file结构体)。一个进程启动时,默认打开了3个文件,标准输入、标准输出、标准错误,对应文件描述符是0(STDIN_FILENO)、1(STDOUT_FILENO)
2016-06-18 14:50:07 427
原创 release编译禁用优化选项出现莫名其妙的问题
应该说release下用禁用优化就是坑。这个一般是debug模式下的。不过工程都是release的,看不到调试信息,所以我禁用来看调试信息的
2016-06-18 12:04:22 3342
原创 socket 请求接收完整的一个http响应(设置recv 接收超时选项SO_RCVTIMEO)
#include#include#include //strlen#include#include //inet_addr#include#includeint main(int argc, char *argv []){ int socket_desc; struct sockaddr_in server; char *message; //Create
2016-06-18 11:46:14 1562
原创 System V 共享内存 和 系列函数
以下是几个共享内存函数:#include #include int shmget(key_t key, size_t size, int shmflg);void *shmat(int shmid, const void *shmaddr, int shmflg);int shmdt(const void *shmaddr);int shmctl(int shmid
2016-06-18 11:22:31 266
原创 共享内存简介和mmap 函数
#include#include#include#include#include#include#include#include#include#include#include#define ERR_EXIT(m) \ do { \ perror(m); \ exit(EXIT_FAILURE); \ } while(0)
2016-06-18 11:04:48 314
原创 linux网络编程之System V 消息队列:消息队列实现回射客户/服务器和 msgsnd、msgrcv 函数
#include#include #include#include#include#include#include#include#define ERR_EXIT(m) \ do { \ perror(m); \ exit(EXIT_FAILURE); \ } while(0)#define MSGMAX 8192
2016-06-18 10:52:16 441
原创 基于UDP协议的网络程序
#include#include#include#include#include#include#include#include#define ERR_EXIT(m) \ do { \ perror(m); \ exit(EXIT_FAILURE); \ } while (0)void echo_ser(int sock){
2016-06-18 10:32:02 541
原创 epoll
http://blog.csdn.net/jnu_simba/article/details/9075719read_write.hssize_t readn(int fd, void *buf, size_t count) { size_t nleft = count; ssize_t nread; char *bufp = (char *)buf;
2016-06-18 10:20:23 405
原创 poll
1、一个进程能打开的最大文件描述符限制。这可以通过调整内核参数。可以通过ulimit -n来调整或者使用setrlimit函数设置, 但一个系统所能打开的最大数也是有限的,跟内存大小有关,可以通过cat /proc/sys/fs/file-max 查看2、select中的fd_set集合容量的限制(FD_SETSIZE,一般为1024) ,这需要重新编译内核。[root@local
2016-06-18 10:01:55 254
原创 select模型
#include#include#include#include#include#include#include#include#include#include#include#define ERR_EXIT(m) \ do { \ perror(m); \ exit(EXIT_FAILURE); \ } while (0)
2016-06-17 17:55:57 275
原创 使用fork并发处理多个client的请求和对等通信p2p
一、在前面讲过的回射客户/服务器程序中,服务器只能处理一个客户端的请求,如何同时服务多个客户端呢?在未讲到select/poll/epoll等高级IO之前,比较老土的办法是使用fork来实现。网络服务器通常用fork来同时服务多个客户端,父进程专门负责监听端口,每次accept一个新的客户端连接就fork出一个子进程专门服务这个客户端。但是子进程退出时会产生僵尸进程,父进程要注意处理SIGCHLD
2016-06-17 17:41:12 462
原创 使用命令修改注册表键值及权限
很多时候,你可能需要对注册表的某些项进行权限的修改,以便进行管理,如对注册表中的启动项授予只读权限,这样可以避免病毒的感染随开机自动启动(当然这种修改run来自启动的病毒越来越少了,一般现在都是修改驱动)regini命令就是这样一个专门修改键值以及权限的命令。regini命令格式为: regini regini.ini 这个命令需要一个ini文件 ,其中regini.ini的格式为:注册
2016-06-17 17:14:10 12121
原创 GetThreadContext找到程序占用CPU的技巧
#include #include #include #include using namespace std;TCHAR strname[]=TEXT("1.exe"); //程序名称int main (void){ //创建进程 STARTUPINFOA psiStartInfo={0}; //STARTUPINFOW //UNICODE PROCESS_IN
2016-06-17 17:12:53 3794
原创 简单的回射客户/服务器程序 read write
#include#include#include#include#include#include#include#include#include#define ERR_EXIT(m) \ do { \ perror(m); \ exit(EXIT_FAILURE); \ } while (0)int main(void){
2016-06-17 16:58:04 506
原创 h_errno
#include #include #include #include #include #include #include #include using namespace std;int main(int argc, char *argv []){ char sz [] = "Hello, World!"; //Hover mouse over "sz" while
2016-06-16 15:04:15 986
原创 gethostbyname
#include #include #include #include #include #include #include #include using namespace std;int main(int argc, char *argv []){ char sz [] = "Hello, World!"; //Hover mouse over "sz" while
2016-06-16 11:50:01 314
原创 strerror
#include #include #include #include #include using namespace std;int main(int argc, char *argv[]){ char sz[] = "Hello, World!"; //Hover mouse over "sz" while debugging to see its contents c
2016-06-16 10:11:09 247
原创 gmtime
#include #include #include using namespace std;int main(int argc, char *argv[]){ char sz[] = "Hello, World!"; //Hover mouse over "sz" while debugging to see its contents cout << sz << endl;
2016-06-16 09:58:40 851
原创 简单的TCP通讯
Server代码#include #include #include #include #include int main(int argc, const char * argv []){ struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_port = hton
2016-06-15 17:11:57 328
函数多线安全性问题,大家帮我看看
2015-06-04
TA创建的收藏夹 TA关注的收藏夹
TA关注的人