能力值:
( LV2,RANK:10 )
|
-
-
2 楼
stdcall約定的話就是從右到左傳參
GenRegCode(TCHAR *rCode,TCHAR *name ,int len)
按順序依次 push len push *name push *rCode 址址是len最大,*name其次,*rCode最小
上面的例子是用ESP定位參數的,ESP在有PUSH或POP操作時,值會改變,所以定位同一個參數,在不同的地方偏移也可能不一樣
00401341 mov ebp,[esp+0C] ;将参数从栈中传给ebp(用户名cName指针)
。
中間有PUSH指令
。
00401347 mov edi,[esp+18] ;将参数从堆栈中传给edi (len参数的值)
。
中間有PUSH指令
。
00401386 mov eax,[esp+1C] ;将参数从堆中传给eax(序列号cCode 指针)
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
从头分析:
push ebx ;int len k
lea ....
push edx ;*name k-4
push eax ;*rCode k-8
call ;GenRegCode() k-0C
push ebp k-10h
mov ebp,[esp+0C]
此时esp 应该是k-14h, esp+0Ch =k-8;
它对应的是rCode呀,而不是*name
还有四个字节我一直想不通去哪儿了
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
你看错了,esp是k-10
|
|
|