導航:首頁 > 凈水問答 > 地址取寄存器edi的值

地址取寄存器edi的值

發布時間:2022-03-25 20:58:26

『壹』 edi,esi寄存器是什麼寄存器有什麼作用

EDI和ESI分別是16位寄存器DI和SI的32位擴展
它們是目的變址寄存器和源變址寄存器,用於串操作指令中。
同時,它們也可以作為通用寄存器使用。

『貳』 求助:如何取出地址寄存器的值啊!

AR1的值取不出來,AR1是地址如果要用指針可以這樣做L
P#20.0LAR1
把20賦值給AR1L
MW[AR1,P0.0]
把mw20的值搬移到mw10T
MW10

『叄』 函數調用的實際實現

EBP
EBP是所謂的幀指針,指向當前活動記錄的上方(上一個活動記錄的最下方)
ESP
ESP是所謂的棧指針,指向當前活動記錄的最下方(下一個將要插入的活動記錄的最上方)
這兩個指針的值規定了當前活動記錄的位置 將函數參數壓棧:mov eax,dword ptr [n] ;(n為參數變元)
push eax 函數調用將執行如下操作:
⒈將幀指針壓入棧中:push ebp
⒉使得幀指針等於棧指針:mov ebp,esp
⒊使棧指針自減,自減得到的內存地址應當能夠(足夠)用來存儲被調用函數的本地狀態:sub esp,0CCh
注意:0CCh為0xCC,隨著具體函數的不同而不同。 push ebx ;保存ebx寄存器的值
push esi ;保存esi寄存器的值
push edi ;保存edi寄存器的值 lea edi,[ebp-0CCh] ;0cch是當前活動記錄的大小。
EDI是目的變址寄存器。 00411417 pop edi
00411418 pop esi
pop ebx 當函數返回時,編譯器和硬體將執行如下操作:
⒈使棧指針等於幀指針: mov esp,ebp
⒉從棧中將舊的幀指針彈出: pop ebp
⒊返回:ret ;void function(int n);{push ebp
mov ebp,esp
sub esp,0CCh
push ebx
push esi
push edi
lea edi,[ebp-0CCh]
mov ecx,33h
mov eax,0CCCCCCCCh
rep stos dword ptr es:[edi]
;char a=1;
mov byte ptr [a],1
;if(n==0)return;
cmp dword ptr [n],0
jne function+2Ah (4113CAh)
jmp function+77h (411417h)
;printf(%d (0x%08x) ,n,&n);
mov esi,esp
lea eax,[n]
push eax
mov ecx,dword ptr [n]
push ecx
push offset string %d (0x%08x) (415750h)
call dword ptr [__imp__printf (4182B8h)]
add esp,0Ch
cmp esi,esp
call @ILT+305(__RTC_CheckEsp) (411136h)
;function(n-1);
mov eax,dword ptr [n]
sub eax,1
push eax
call function (411041h)
add esp,4
;printf(----%d (0x%08x) ,n,&n);
mov esi,esp
lea eax,[n]
push eax
mov ecx,dword ptr [n]
push ecx
push offset string ----%d (0x%08x) (41573Ch)
call dword ptr [__imp__printf (4182B8h)]
add esp,0Ch
cmp esi,esp
call @ILT+305(__RTC_CheckEsp) (411136h);}
pop edi
pop esi
pop ebx
add esp,0CCh
cmp ebp,esp
call @ILT+305(__RTC_CheckEsp) (411136h)
mov esp,ebp
pop ebp
ret 117: bR = t1(p);
匯編代碼如下:
00401FB8 mov ecx,dword ptr [ebp-8] ;將參數放入ecx寄存器
00401FBB push ecx ;參數入棧
00401FBC call @ILT+10(t1) (0040100f) ;函數調用,下一行地址00401FC1入棧
00401FC1 add esp,4 ;函數返回,堆棧指針加4,復原為00401FB8時的值
00401FC4 mov dword ptr [ebp-10h],eax ;從eax中取出高級語言中的函數返回值,放入bR變數中
其中t1函數如下:
125: BOOL t1(void* p)
126: {
00402030 push ebp ;ebp入棧
00402031 mov ebp,esp ;ebp指向此時堆棧的棧頂
00402033 sub esp,44h ;esp減少一個值,空出一段存儲區
00402036 push ebx ;將三個寄存器的值入棧,以便在函數中使用它
00402037 push esi ;
00402038 push edi ;
00402039 lea edi,[ebp-44h] ;
0040203C mov ecx,11h ;
00402041 mov eax,0CCCCCCCCh ;
00402046 rep stos dword ptr [edi] ;
127: int* q = (int*)p; ;
00402048 mov eax,dword ptr [ebp+8] ;ebp+8指向函數輸入參數的最低位地址;
;如果是ebp+4則指向函數返回地址00401FC1的最低位,值為C1
0040204B mov dword ptr [ebp-4],eax ;
128: return 0;
0040204E xor eax,eax ;返回值放入eax寄存器中
129: }
00402050 pop edi ;三個寄存器出棧
00402051 pop esi ;
00402052 pop ebx ;
00402053 mov esp,ebp ;esp復原
00402055 pop ebp ;ebp出棧,它的值也復原了
00402056 ret ;返回到此時棧頂存儲的代碼地址:00401FC1
;故而如果不幸被修改了返回地址,程序就會出現意外
以上匯編代碼由VC++6.0編譯得到。
堆棧在EBP入棧後的情況:
低位 高位
↓ ↓
內存地址 堆棧
┆ ┆
0012F600├────────┤← edi = 0012F600
│ │
0012F604├─┄┄┄ ┄─┤
│ │
│ │
┆ 44h的空間 ┆
┆ ┆
│ │
│ │
0012F640├─┄┄┄┄─┤
│ │
0012F644├────────┤← ebp被賦值後指向該單元,此時ebp=0012F644
│AC F6 12 00 │ebp賦值為esp之前的值
0012F648├────────┤
│C1 1F 40 00 │返回地址
0012F64C├────────┤← ebp + 8
│A0 F6 12 00 │函數實參p的值;
0012F650├────────┤
│ │
├────────┤
┆ ┆
註:存儲器存儲空間堆棧按從高到低的排列,左邊標注的地址是其右下方存儲單元的最低位地址。如0012F644指向0012F6AC的AC位元組,AC在棧頂。圖中存儲器中的內容按從低到高位書寫,「AC F6 12 00」= 0x0012F6AC
說明
(1)一個c程序由一個或多個程序模塊組成,每一個程序模塊作為一個源程序文件。對較大的程序,一般不希望把所有內容全放在一個文件中,而是將它們分別放在若干個源文件中,由若干個源程序文件組成一個c程序。這樣便於分別編寫和編譯,調高調試效率。一個源程序文件可以為多個c程序公用。
(2)一個源程序文件由一個或多個函數以及其他有關內容(如指令,數據聲明與定義等)組成。一個源程序文件是一個編譯單位,子啊程序編譯時是以源程序文件為單位進行編譯的,而不是以函數為單位進行編譯的。
(3)c程序的執行是從main函數開始的,如果在main函數中調用其他函數,在調用後流程返回main函數,在main函數中結束整個程序的進行。
(4)所有函數都是平行的,即在定義函數時是分別進行的,是互相獨立的。一個函數並不從屬於另一個函數,即函數不能嵌套定義。函數間可以互相調用,但不能調用main函數。main函數是被操作系統調用的。
(5)從用戶的角度來看函數分為兩種
a:庫函數,它是由系統提供的,用戶不必自己定義,可直接使用它們。應該說明,不同的c語言編譯系統提供的庫函數的數量和功能會有一些不同,當然許多基本的函數是共同的。
b:用戶自己定義的函數。它是以解決用戶專門需求的函數。
(6)從函數的形式來看,函數分為兩類。
a:無參函數。無參函數可以帶回或不帶回函數值,但一般不帶回函數值較多。
b:有參函數。在調用函數時,主調函數在調用被調函數時,通過參數向被調函數傳遞數據。一般情況下,執行調用函數時會得到一個函數值,供主調函數使用。

『肆』 mov edi,dword ptr ds:[esi+0x60] 在匯編語言中這是什麼意思

dwore ptr 表示佔用兩個位元組的大小
ds:[esi+62c] 表示內存的地址 其中ds是段地址 [esi+62c]是偏移地址
edi 它就是寄存器了
所以 MOV DWORD PTR DS:[ESI+62C],EDI 就是將 edi 中的數據存儲到內存中 地址為ds:[esi+62c]到 ds:[esi+62e]

『伍』 匯編語言 esi,edi寄存器問題

基本上沒差別

只是有一些指令,默認情況下是從 esi 指定的位置向edi 指定的位置搬

『陸』 寄存器 rdi與edi什麼關系

DI、EDI、RDI都是目的變址寄存器,DI用於16位匯編、EDI用於32位匯編、RDI用於64位匯編中,並且RDI向前兼回容EDI、DI,EDI向前兼容DI。與之對應的還答有SI、ESI、RDI都是源變址寄存器,區別與DI、EDI、RDI類似。

『柒』 在做windows XP驅動開發中,需要獲取一個寄存器的值,其物理地址是0xFEE00000,怎麼才能取到值

用過WinDbg么,建議你裝上Windbg,

連接上調試機,等連接成功後,暫停被調試機,

用-u命令可以顯示各個寄存器的值,

用其他命令也可以修改寄存器值

有什麼不明白的,回復我

『捌』 匯編語言里 exp eax ebp edi ecx 這些都是什麼意思啊

eax ebp edi ecx都是寄存器的名稱;
而且是32位的寄存器.如果用C語言來解釋,可以把這些寄存器當作變數看待回.
add eax,-2 ;可以認為是給變數eax加上答-2這樣的一個值.
建議了解一點匯編知識.

『玖』 如何在特定的內存地址中得到某一寄存器的值

PTR是一個偽操作啊 就是將後面的數據類型轉變為雙字類型 這個物理地址其實應該是 SS後面補零再加上[EBP-8] 這樣得到物理地址取出寄存器裡面的數據

閱讀全文

與地址取寄存器edi的值相關的資料

熱點內容
在什麼場所會使用到污水提升器 瀏覽:64
簡單凈水器怎麼裝 瀏覽:876
ro膜化學清洗方法 瀏覽:548
大眾邁騰用什麼牌子空氣濾芯 瀏覽:332
企業污水排放應該滿足什麼標准 瀏覽:252
凈水器裡面有沉澱物怎麼回事 瀏覽:648
純水樹脂筒扁了怎麼辦 瀏覽:831
蒸餾釜危害因素 瀏覽:284
飲水機藍色燈亮代表什麼原因 瀏覽:117
樹脂拋光碟如何用 瀏覽:181
怎麼區別小米空氣凈化器是第幾代 瀏覽:131
格米萊咖啡機除垢鍵 瀏覽:918
混床再生出現三層樹脂 瀏覽:965
安利凈水器的廢水 瀏覽:35
小型工業凈水器RO膜 瀏覽:474
陽極氧化污水處理公司 瀏覽:364
文件過濾文件操作來自進程 瀏覽:522
上汽通用汽車空調濾芯怎麼換 瀏覽:707
帝來空氣濾芯怎麼獲得 瀏覽:589
活性炭過濾和ro反沖洗 瀏覽:669