一直缠绕的两个问题:怎样标识的内核栈与用户栈?如何在内核态堆栈与用户态堆栈之间切换? 用户态堆栈指针:ss和esp; 内核态堆栈指针:ss0和esp0; 二者均位于任务的tss结构中。这里的任务是指除任务0和1之外的普通任务。 CPU进行用户态堆栈到内核态堆栈的切换操作时,CPU会从当前任务的任务状...
分类:
系统相关 时间:
2014-10-10 23:09:25
阅读次数:
252
Alictf WriteupReverse1. Ch1根据题目描述,首先在Ch1.exe文件中搜索Secret.db字符串,如下所示。之后定位文件创建和数据写入位置,如下所示。可以看到,写入数据的地址位于esp+30h+var10,而在之前调用了data_handle函数对齐进行了处理,data_h...
分类:
其他好文 时间:
2014-09-22 19:20:13
阅读次数:
471
http://blog.163.com/di_yang@yeah/blog/static/86118492201212534924900/一直缠绕的两个问题:怎样标识的内核栈与用户栈?如何在内核态堆栈与用户态堆栈之间切换?用户态堆栈指针:ss和esp;内核态堆栈指针:ss0和esp0;二者均位于任务...
分类:
系统相关 时间:
2014-09-22 10:32:22
阅读次数:
229
我刚用C#一个来月,可能理解得不对,还请大家指教。
读懂文章你需要对C语言的指针有所理解。
需要注意区别:对C\C++来说,任何类型都可以当成C#的“引用类型”,因为有指针。
【在内存上】
void foo()
{
int aaa = 0; //值类型,aaa在Stack上分配(SUB ESP,XX)
int* paaa = new int[123]; //引用类型,paaa在Heap上分配,HeapAlloc(GetProcessHeap()...)
foo2(&aaa); //【引用】值类型a...
分类:
编程语言 时间:
2014-09-21 21:50:51
阅读次数:
229
以我在notepad.exe中设置CreateFileW特定文件名断点为例。bpkernel32!CreateFileW"r$t1=poi(esp+4);as/mu$FileName$t1;.block{.if($sicmp(\"${$FileName}\",\"C:\\abc.txt\")!=0){.echoc:\\abc.txt}.else{.echononono;gc}}"bpkernel32!CreateFileW"r$t1=poi(esp+4);as/mu$FileN..
分类:
数据库 时间:
2014-09-02 18:09:45
阅读次数:
256
retn 4是个函数返回指令。以前一直纠结这个retn的寄存器操作顺序,手头正好在调试,详细跟了一下,豁然开朗,特分享。先假设个环境:retn 4未执行时,ESP=0013feb8;EIP=5d1d8b97;而[0013feb8]=7c974a19执行retn 4之后:首先EIP=[0013feb8...
分类:
其他好文 时间:
2014-08-29 14:30:07
阅读次数:
306
Enter的作用相当==push ebp和mov ebp,esp这后面两句大家很熟悉吧?函数开始一般都是这两句Leave的作用相当==mov esp,ebp和pop ebp而这后面这两句也很常见,函数调用完后一般的用到以上的Enter和leave的作用分别函数开始和结束Win32汇编中局部变量的使用...
分类:
其他好文 时间:
2014-08-23 22:56:41
阅读次数:
333
//求两圆相交的面积#include#include#include#include#include#include#define esp 1e-8using namespace std;struct Circle{ double x,y; double r;};double calAr...
分类:
其他好文 时间:
2014-08-23 18:55:31
阅读次数:
276
多任务的本质是利用定时器和far跳转在任务之间进行切换,具体来说,一开始先运行main函数(就是处理我们的鼠标、键盘和定时器等事件),0.02s后定时器超时,执行如下语句:
farjmp(0, 4 * 8);
这是一个far跳转,先看一下farjmp的实现:
_farjmp: ; void farjmp(int eip, int cs)
JMP FAR [ESP+4] ; eip, c...
分类:
其他好文 时间:
2014-08-15 16:07:30
阅读次数:
169
我们知道函数中的局部变量存储在堆栈之中,如下图所示,当局部变量1、2、3存到堆栈中后,堆栈指针ESP并没有下移,依然指向原来的位置。出现这种情况的原因是:局部变量进入堆栈并不是使用push而是使用mov操作,所以ESP无变化。正是因为这样,如果函数把任何数据压入堆栈,那么局部变量将会被覆盖。 为了保...
分类:
其他好文 时间:
2014-08-13 22:00:17
阅读次数:
259