1樓:殘雪黃昏
如果你學了彙編,我想可定能看懂,而且你在研究反彙編,肯定一牛人。
如果不是,請看下面:
0048bfda 8b55 fc mov edx,dword ptr
ss:[ebp-4] 這是記憶體中的地址
將堆疊段中一個長度為雙位元組(字)的單元中的內容拷貝到edx暫存器中0048bfdd a1 2c104900 mov eax,dword ptr
ds:[49102c] 這是記憶體中的地址
將資料段中一個長度為雙位元組(字)的單元中的內容拷貝到eax暫存器中0048bfe2 8b44b8 14 mov eax,dword ptr
ds:[eax+edi*4+14] 這是記憶體中的地址記憶體可分為資料段,堆疊段,**段等
2樓:缺角全書
**太少,無法判斷。另外你知道源**是什麼語言?windows 的程式還是 linux?
第一行,讀出一個4位元組區域性變數,跟後面兩行沒有直接關係。
第二,三行,看上去像是從一個整數或者指標陣列中讀出一個4位元組變數,這個陣列成員的大小應該是 4 位元組的(edi*4)。
但是最後 +14 不能被 4 整除,不能確定到底是在幹什麼。如果是 12 或者其他 4 的倍數,我估計是,
int a; // 全域性變數
void f()
前後**再多一點可能還能再看看,另外關於源程式的資訊提供的越多越好。
3樓:匿名使用者
0048bfda 8b55 fc mov edx,dword ptr ss:[ebp-4]
=>ebp-4是區域性變數,當前函式的第一個引數。即:當前函式fun(n1,n2,..)的引數n1值,賦值給edx。
0048bfdd a1 2c104900 mov eax,dword ptr ds:[49102c]
=>該句是將全域性變數[49102c]的值賦給eax。從下句看這個變數是一個結構體變數。
0048bfe2 8b44b8 14 mov eax,dword ptr ds:[eax+edi*4+14]
=>eax+edi*4+14這個看上去像一個結構體,即全域性變數[49102c]是結構體的首地址。
edi*4,是結構體裡的一個陣列,4個位元組遞增,因此陣列可以是dword,int或者指標型別。
該陣列在結構體中的偏移是14h,因為eax+14。
ps:結構體的可能性很大,但即使不是結構體,也可使用結構體來套入。。。
4樓:匿名使用者
用c語言來描述就是
_eax = szpara[_edi + 5];
其中szpara是一個int 型的全域性陣列。
例如 int szpara="123456789";
關於組合語言,關於組合語言中的LOOP指令
簡單的說就是 如果時間充裕 先學彙編,因為彙編會極大的幫助你認識晶片的內部,具體在執行的時候它是怎麼工作的。如果時間不充裕 先學c,因為c編寫語言只需要極少的對晶片的瞭解即可。比較 組合語言 程式 效率最高。通俗的說,寫出來的東西佔空間小。缺點 開發週期較長 c語言 程式 效率比較高。通俗的說,佔的...
組合語言關於assume的用法,彙編中assume的作用?
assume 段暫存器的說明語句 在組合語言源程式中可以定義多個段,每個段都要與一個段暫存器建立一種對應關係。建立這種對應關係的說明語句格式如下 assume 段暫存器名 段名 段暫存器名 段名,其中 段暫存器是cs ds es ss fs和gs,段名是在段定義語句說明時的段名。在一條assume語...
幾個彙編的問題 1 8086組合語言指令由幾部分組成 各部分的作用是什麼
1.8086組合語言指令由標號 操作碼 運算元和註釋組成,其中標號和註釋可以省略,操作碼指出指令要過盛的功能,運算元指出完成的物件.2.變數和標號的區別是變數由偽指令定義,標號是指令前面的符號,變數也偽指令定義符之間由空格分隔,標號與指令助詞符之間由冒號分隔。3.開發組合語言源程式的主要步驟有分析問...