當前位置:首頁 » 凈水方式 » 匯編pushedi

匯編pushedi

發布時間: 2021-04-04 21:53:22

A. 請大家幫我解釋下這個匯編程序的意思

0051A038 push ebp
0051A039 mov ebp, esp ;開辟新的堆棧
0051A03B add esp, $FFFFFEE0 ;為參數開辟空間
0051A041 push ebx
0051A042 push esi
0051A043 push edi
0051A044 xor ecx, ecx ;清空ecx
0051A046 mov [ebp+$FFFFFEE0], ecx
0051A04C mov [ebp+$FFFFFEE4], ecx
0051A052 mov [ebp+$FFFFFEE8], ecx
0051A058 mov [ebp+$FFFFFEEC], ecx
0051A05E mov [ebp-$0C], ecx
0051A061 mov [ebp-$10], ecx
0051A064 mov [ebp-$04], ecx
0051A067 mov [ebp-$08], ecx ;把函數參數壓棧,全部是0
0051A06A mov ebx, eax
0051A06C xor eax, eax ;清空eax
0051A06E push ebp
0051A06F push $0051A2A1
0051A074 push dword ptr fs:[eax]
0051A077 mov fs:[eax], esp ;設置新的seh
0051A07A lea eax, [ebp-$04] ;把ebp-$04的參數傳到eax
0051A07D mov edx, [$534BAC] ;把$534BAC地址的數據放到edx
0051A083 call 00404140 ;調用函數404140
0051A088 mov eax, [ebp-$04]
0051A08B push eax ;保存eax
0051A08C lea eax, [ebp-$08] ;獲得ebp-$08的地址
0051A08F mov edx, [$5350C0] ;把$5350c0地址的數據放到edx
0051A095 call 00404140 ;調用函數404140
0051A09A mov eax, [ebp-$08]
0051A09D pop edx
0051A09E call 00488D1C ;調用函數488d1c
0051A0A3 test eax, eax ;測試返回值是否為0
0051A0A5 jle 0051A0B6 ;小於或等於跳
0051A0A7 mov dword ptr [ebx+$0234], $00000006
0051A0B1 jmp 0051A266 ;跳到0051A266
0051A0B6 lea edx, [ebp-$0C]
0051A0B9 mov eax, [ebx+$02EC]
0051A0BF call 004352A8 ;調用函數4352a8
0051A0C4 mov eax, [ebp-$0C]
0051A0C7 push eax
0051A0C8 lea eax, [ebp-$10]
0051A0CB mov edx, [$534BAC]
0051A0D1 call 00404140 ;調用函數404140
0051A0D6 mov edx, [ebp-$10]
0051A0D9 pop eax
0051A0DA call 00488D1C ;調用函數488d1c
0051A0DF test eax, eax ;測試返回值是否為0
0051A0E1 jnz 0051A101
0051A0E3 push $30

B. OD工具如何查找特定的匯編指令如:MOV edi,edi 這樣的

所有來指令序列查找范圍是自當前CPU窗口所在的內存段。

Ctrl+G,然後輸入401000,回車,然後你再找

你先得跳到你要找的代碼所在的內存段,EXE是從401000開始的,如果是DLL的話,得按Alt+E,查看模塊的基址,然後跳到基址之後再查找

C. 求匯編指令解釋dec edx

add byte ptr ds:[eax],al ;將AL寄存器中的內容存入段寄存器DS定位的,由EAX寄存器指向的內存單元.
push edi ;將EDI寄存器壓入堆棧,注意是四個位元組
push ds ;將DS寄存器壓入堆棧,注意是兩個位元組
dec edx ;讓EDX寄存器自減一,即 EDX <- (EDX)-1

D. 函數調用堆棧原理 push ebx push esi push edi是什麼作用

[cpp] view plain
int goo(int a, int b)
{
return a + b;
}

void foo()
{
int a[] = {1, 2, 3};
int result = goo(a[1], a[2]);
printf("result: %d", result);
}

VS2010下編譯

foo函數部分匯編:

[cpp] view plain
00EB3890 push ebp
00EB3891 mov ebp,esp
00EB3893 sub esp,0E4h
00EB3899 push ebx
00EB389A push esi
00EB389B push edi
00EB389C lea edi,[ebp-0E4h]
00EB38A2 mov ecx,39h
00EB38A7 mov eax,0CCCCCCCCh
00EB38AC rep stos dword ptr es:[edi]
00EB38AE mov eax,dword ptr [___security_cookie (0EB7000h)]
00EB38B3 xor eax,ebp
00EB38B5 mov dword ptr [ebp-4],eax
int a[] = {1, 2, 3};
00EB38B8 mov dword ptr [ebp-14h],1
00EB38BF mov dword ptr [ebp-10h],2
00EB38C6 mov dword ptr [ebp-0Ch],3
int result = goo(a[1], a[2]);
00EB38CD mov eax,dword ptr [ebp-0Ch]
00EB38D0 push eax
00EB38D1 mov ecx,dword ptr [ebp-10h]
00EB38D4 push ecx
00EB38D5 call goo (0EB11E5h)
00EB38DA add esp,8

goo函數完整匯編:

[cpp] view plain
00EB1580 push ebp
00EB1581 mov ebp,esp
00EB1583 sub esp,0C0h
00EB1589 push ebx
00EB158A push esi
00EB158B push edi
00EB158C lea edi,[ebp-0C0h]
00EB1592 mov ecx,30h
00EB1597 mov eax,0CCCCCCCCh
00EB159C rep stos dword ptr es:[edi]
return a + b;
00EB159E mov eax,dword ptr [a]
00EB15A1 add eax,dword ptr [b]
}
00EB15A4 pop edi
00EB15A5 pop esi
00EB15A6 pop ebx
00EB15A7 mov esp,ebp
00EB15A9 pop ebp
00EB15AA ret

foo函數push ebp, mov ebp, esp後
保存原ebp,設定新的ebp為當前esp位置

sub esp, 0E4h
給局部變數分配足夠大的棧空間

保存原先的一些寄存器值,每次push,esp繼續向下移

為局部變數a數組賦值

調用goo前Push兩個參數,esp繼續下移

call goo函數時,cpu自動push下一條指令地址,esp繼續下移

在goo函數中,同樣保存foo函數中的ebp值,設定新的ebp,esp等

在執行玩goo函數最後幾句指令時,edi, esi, ebx恢復,esp同時也編程goo中ebp的位置,ebp恢復至foo函數原來的位置(pop ebp)
下一條指令也裝入IP(ret指令),esp繼續向上一步

foo函數中的add esp, 8將esp值繼續往上(清除函數參數)
清除函數參數的工作也可通過ret X在goo函數返回時設定(這樣的話不必在每次調用點上加上add esp, X指令縮短了編譯出來的文件大小,但在子函數中清除將不能做到printf等的可變參數個數功能,因為子函數不知道具體有多少要參數進入了,只有調用處才知道)

E. 反匯編小白求知:push esi push edi push 9 push r10 pop edi 然後。。。。。會怎樣

push esi //esi進棧
push edi //edi進棧
push 9 //9進棧
push 10 //10進棧
pop edi //10出棧保存到edi中

//棧中的數據變成了
9
edi
esi

----------沒啥意思的。沒事到0x30網路貼吧耍耍, 一起討論分享交流編程技術。

F. 匯編語言用指令PUSHA到底把、哪些壓棧了呢

如果是51單片機,那麼沒有PUSH A指令,可以是PUSH Acc。進棧時,看你的SP開在什麼地方,先要對SP加1,再進棧。
例如:MOV SP,#60H
PUSH ACC
那麼,執行PUSH ACC時,先SP+1,那麼SP指向61H,然後將ACC的內容推入61H中!

G. 匯編語言指令大全,要詳細的 !!!!

一、數據位傳送指令:

1、MOV C, bit ;bit 可直接定址位 C←(bit)

2、MOV bit,C ;C 進位位 (bit) ← C

二、位變數修改指令:

1、CLR C ; 將C=0

2、CLR bit

3、CPL C ; 將C求反再存入C

4、CPL bit ; 將bit求反再存入bit

5、SETB C ; 將C=1

6、SETB bit ; (bit) ← 1

三、位變數邏輯指令:


ANL C, bit ANL C, bit ORL C, bit ORL C, bit

H. 反匯編,不知道這段是什麼意思。請大俠幫忙

暈乎啊。
數據傳送指令 MOV

格式: MOV OPRD1,OPRD2
----

功能: 本指令將一個源操作數送到目的操作數中,即OPRD1<--OPRD2.

堆棧操作指令 PUSH和POP

格式: PUSH OPRD
---- POP OPRD

功能: 實現壓入操作的指令是PUSH指令;實現彈出操作的指令是POP指令.

測試指令 TEST

格式: TEST OPRD1,OPRD2
----

功能: 其中OPRD1、OPRD2的含義同AND指令一樣,也是對兩個操作數進行按位的'與'運算,唯一不同之處是不將'與'的結 ---- 果送目的操作數,即本指令對兩個操作數 的內容均不進行修改,僅是在邏輯與操作後,對標志位重新置位.

TEST與AND指令的關系,有點類似於CMP與SUB指令之間的關系.

條件轉移指令JNE/JNZ

格式: JNE/JNZ 標號
----

功能: ZF=0,轉至標號處執行
----說明: 1. 指令JNE與JNZ等價,它們是根據標志位ZF進行轉移的指令
----
2. JNE,JNZ均為一條指令的兩種助記符表示方法

I. 匯編指令的數據傳輸

它們在存儲器和寄存器、寄存器和輸入輸出埠之間傳送數據。
1. 通用數據傳送指令
MOV 傳送字或位元組.
MOVSX 先符號擴展,再傳送.
MOVZX 先零擴展,再傳送.
PUSH 把字壓入堆棧.
POP 把字彈出堆棧.
PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧.
POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧.
PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧.
POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧.
BSWAP 交換32位寄存器里位元組的順序
XCHG 交換字或位元組.( 至少有一個操作數為寄存器,段寄存器不可作為操作數)
CMPXCHG 比較並交換操作數.( 第二個操作數必須為累加器AL/AX/EAX )
XADD 先交換再累加.( 結果在第一個操作數里 )
XLAT 位元組查表轉換.
── BX 指向一張 256 位元組的表的起點, AL 為表的索引值 (0-255,即
0-FFH); 返回 AL 為查表結果. ( [BX+AL]->AL )
2. 輸入輸出埠傳送指令.
IN I/O埠輸入. ( 語法: IN 累加器, {埠號│DX} )
OUT I/O埠輸出. ( 語法: OUT {埠號│DX},累加器 )
輸入輸出埠由立即方式指定時, 其范圍是 0-255; 由寄存器 DX 指定時,
其范圍是 0-65535.
3. 目的地址傳送指令.
LEA 裝入有效地址.
例: LEA DX,string ;把偏移地址存到DX.
LDS 傳送目標指針,把指針內容裝入DS.
例: LDS SI,string ;把段地址:偏移地址存到DS:SI.
LES 傳送目標指針,把指針內容裝入ES.
例: LES DI,string ;把段地址:偏移地址存到ES:DI.
LFS 傳送目標指針,把指針內容裝入FS.
例: LFS DI,string ;把段地址:偏移地址存到FS:DI.
LGS 傳送目標指針,把指針內容裝入GS.
例: LGS DI,string ;把段地址:偏移地址存到GS:DI.
LSS 傳送目標指針,把指針內容裝入SS.
例: LSS DI,string ;把段地址:偏移地址存到SS:DI.
4. 標志傳送指令.
LAHF標志寄存器傳送,把標志裝入AH.
SAHF 標志寄存器傳送,把AH內容裝入標志寄存器.
PUSHF 標志入棧.
POPF 標志出棧.
PUSHD 32位標志入棧.
POPD 32位標志出棧.

J. 匯編pushad可以替換成什麼

Push EAX
Push ECX
Push EDX
Push EBX

Push EBP
Push ESI
Push EDI

熱點內容
丁度巴拉斯情人電影推薦 發布:2024-08-19 09:13:07 瀏覽:886
類似深水的露點電影 發布:2024-08-19 09:10:12 瀏覽:80
《消失的眼角膜》2電影 發布:2024-08-19 08:34:43 瀏覽:878
私人影院什麼電影好看 發布:2024-08-19 08:33:32 瀏覽:593
干 B 發布:2024-08-19 08:30:21 瀏覽:910
夜晚看片網站 發布:2024-08-19 08:20:59 瀏覽:440
台灣男同電影《越界》 發布:2024-08-19 08:04:35 瀏覽:290
看電影選座位追女孩 發布:2024-08-19 07:54:42 瀏覽:975
日本a級愛情 發布:2024-08-19 07:30:38 瀏覽:832
生活中的瑪麗類似電影 發布:2024-08-19 07:26:46 瀏覽:239