理解进程上下文

2020-9-20 流沙 C/C++

思考: 每个线程在执行的时候,都会独自占用一个CPU,当系统中的线程数量 > CPU的数量时,就会存在多个线程共用一个CPU 的情况。但CPU每次只能运行一个线程,Windows每隔20毫秒会进行线程的切换,那比如线程A执行到地址:0x2345678 eax:1 ecx:2 edx:3 ebx:4...还有eflag标志寄存器中的值等等。。。 此时,线程执行时间到了,被切换到了线程B。。。。当线程B的时间片也到了,再切换会线程A时,系统是如何知道该 从哪个地址开始执行呢?被切换前用到的各种寄存器的值该如何恢复呢? CONTEXT: 该结...

阅读全文>>

评论(0) 浏览(51)


溢出 C++的虚函数表

2020-9-8 流沙 C/C++

代码来源0day书籍, 需要自行修改测试地址 测试代码 #include <windows.h> #include <iostream.h> char shellcode[]= "\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C" "\x8B\xF4\x8D\x7E\xF4\x33\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53" "\x68\x75\x73\x65\x72\x54\x33\xD2\x64...

阅读全文>>

评论(0) 浏览(186)


简单测试的shellcode

2020-8-25 流沙 C/C++

代码来源于 0day书籍 #include "stdafx.h" char popup_general[]= "\xFC\x68\x6A\x0A\x38\x1E\x68\x63\x89\xD1\x4F\x68\x32\x74\x91\x0C" "\x8B\xF4\x8D\x7E\xF4\x33\xDB\xB7\x04\x2B\xE3\x66\xBB\x33\x32\x53" "\x68\x75\x73\x65\x72\x54\x33\xD2\x64\x8B\x5A\x30\x8B\x4B\x0C\x8B" "\x49\x1C\x8B\x09\x8B...

阅读全文>>

评论(0) 浏览(122)


shellcode定位

2020-8-25 流沙 C/C++

参考 0day书籍中的代码 0x01 内存查找 jmp esp #include "stdafx.h" #include<stdlib.h> #include <windows.h> #include <stdio.h> #define DLL_NAME "user32.dll" int main() { BYTE* ptr; int position,address; HINSTANCE handle; BOOL done_flag = FALSE; handl...

阅读全文>>

评论(0) 浏览(116)


VirtualTable Hook

2020-7-19 流沙 C/C++

关键是定位虚表的位置 #include "stdafx.h" #include <windows.h> class Base{ public: virtual void Print(){ printf("gyarmy.com\n"); } }; void hookPrint(){ printf("hook_gyarmy\n"); } int main(int argc, char* argv[]) { Base *pb = new Base(); //关键定位虚表的位置 ...

阅读全文>>

评论(0) 浏览(492)


通用shellcode

2020-7-19 流沙 C/C++

// shellCode1.cpp : Defines the entry point for the console application. // #include "stdafx.h" #include<windows.h> void ShellCode() { typedef DWORD (WINAPI *PGETPROCADDRESS) (HMODULE hModule,LPCSTR lpProcName); typedef int (WINAPI * PMESSAGEBOX) (HWND hWnd,LPCTSTR lpText,L...

阅读全文>>

评论(0) 浏览(489)


调用约定

2020-6-10 流沙 C/C++

函数指针用 __cdecl:    C/C++默认方式,参数从右向左入栈,主调函数负责栈平衡。 __stdcall:            windows API默认方式,参数从右向左入栈,被调函数负责栈平衡。 __fastcall:   快速调用方式。所谓快速,这种方式选择将参数优先从寄存器传入(ECX和EDX),剩下的参数再从右向左从栈传入。因为栈是位于内存的区域,而寄存器位于CPU内,故存取方式快于内存,故其名曰“__fastcall”

阅读全文>>

评论(0) 浏览(537)


fork函数

2018-9-7 流沙 C/C++

 1、fork入门 计算机程序设计中的分叉函数。返回值: 若成功调用一次则返回两个值,子进程返回0,父进程返回子进程标记;否则,出错返回-1。 fork函数将运行着的程序分成2个(几乎)完全一样的进程,每个进程都启动一个从代码的同一位置开始执行的线程。这两个进程中的线程继续执行,就像是两个用户同时启动了 该应用程序的两个副本。 需要注意的是:(1)当调用fork()函数时,在该位置进程一分为二,一个是父进程,一个是子进程。(2)若调用成功返回的是两个值,父进程返回的值为子进程标志,子进程返回的值为0,不成功返回为-1。 为什...

阅读全文>>

评论(0) 浏览(979)


Linux下编译动态链接库与使用详解

2018-9-6 流沙 C/C++

linux下库的简介 两种库 静态库 动态库  区别:在于代码被载入的时刻不同。静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。共享库的代码是在可执行程序运行时才载入内存的,在编译过程中仅简单的引用,因此代码体积较小 库的存储位置和命名规范 存储:一般放在/usr/lib和/lib下  命名规范:  1. 静态库的名字一般为libxxxx.a,其中xxxx是该lib的名称  2. 动态库的名字一般为libxxxx.so.major.minor,xxxx是该...

阅读全文>>

评论(0) 浏览(2692)


mfc多线程

2018-8-30 流沙 C/C++

BOOL g_bWillExit = FALSE; //线程函数 DWORD WINAPI ThreadFunc(PVOID param) { while(g_bWillExit == FALSE) { if(MessageBox(NULL,_T("退出线程吗?"),_T("这是线程"),MB_YESNO)==IDYES) { CmyfirstmfcDlg *pDlg = (CmyfirstmfcDlg*)param; CButton *pButton = (CButton *)pDlg->GetDlgItem(IDC_BUTTON_T...

阅读全文>>

评论(0) 浏览(971)


Powered by 流沙团

备案号:鄂ICP备15017378号-1