2018/11/03-棧、x86架構和暫存器-《惡意程式碼分析實戰》
棧用於函式的記憶體、區域性變數、流控制結構等被儲存在棧中。棧是一種用壓和彈操作來刻畫的資料結構,向棧中壓入一些東西,然後再把他們彈出來。它是一種先入後出(LIFO)的結構。
x86架構有對棧的內建支援。用於這種支援的暫存器包括ESP和EBP。其中,ESP是棧指標,包含了指向棧頂的記憶體地址。一些東西被壓入或彈出棧時,這個暫存器的值相應改變。EBP是棧基址暫存器,在一個函式中會保持不變,因此程式把它當成定位器,用來確定區域性變數和引數的位置。
與棧有關的指令包括push、pop、call、leave、enter和ret。在記憶體中,棧分配成自頂向下的,最高的地址最先被使用。當一個值被壓入棧時,使用低一點的地址。
棧只能用於短期儲存。它經常用於儲存區域性變數、引數和返回地址。其主要用途是管理函式呼叫之間的資料交換。而不同的編譯器對這種管理方法的具體實現有所不同,但大部分常見約定都使用EBP的地址來引用區域性變數與引數。
相關推薦
2018/11/03-棧、x86架構和暫存器-《惡意程式碼分析實戰》
棧用於函式的記憶體、區域性變數、流控制結構等被儲存在棧中。棧是一種用壓和彈操作來刻畫的資料結構,向棧中壓入一些東西,然後再把他們彈出來。它是一種先入後出(LIFO)的結構。 x86架構有對棧的內建支援。用於這種支援的暫存器包括ESP和EBP。其中,ESP是棧指標,包含了指向棧頂的記憶體地址。一些東西
2018/10/03-字串指令(重複指令、操作資料緩衝區指令)、rep與movx指令-《惡意程式碼分析實戰》
重複指令是一組操作資料緩衝區的指令。資料緩衝區通常是一個位元組陣列的形式,也可以是單字或者雙字。(Intel'稱這些指令為字串指令) 最常見的資料緩衝區操作指令是movsx、cmps、stosx和scasx,其中x可以是b、w後者d,分別表示位元組、字和雙字。這些指令對任何形式的資料都有效。
2018/10/03-函式呼叫約定、cdecl、stdcall、fastcall- 《惡意程式碼分析實戰》
cdecl是最常用的約定之一,引數是從右到左按序被壓入棧,當函式完成時由呼叫者清理棧,並且將返回值儲存在EAX中。 stdcall約定是被呼叫函式負責清理棧,其他和cdecl非常類似。 fastcall呼叫約定跨編譯器時變化最多,但是它總體上在所有情況下的工作方式都是相似的。在fastcall
2018/11/06-異常-《惡意程式碼分析實戰》
異常機制允許一個程式在普通執行流之外處理事件。多數時間裡,異常是由錯誤引起的,諸如除零錯誤。當一個異常發生時,執行轉移到處理這個異常的特殊例程。有些異常,比如除零異常,是由硬體丟擲的;其他的,比如無效記憶體訪問,是由作業系統丟擲的。你也可以在程式碼中使用RaiseException呼叫,顯示地丟擲一個異常
2018/11/08-偵錯程式-《惡意程式碼分析實戰》
偵錯程式是用來檢測或測試其他程式執行的以來軟體或硬體。由於剛完成的程式包含錯誤,因此偵錯程式在軟體開發過程中可以大顯身手。偵錯程式讓你能夠洞察程式在執行過程中做了什麼。偵錯程式的目的是允許開發者監控程式的內部狀態和執行。 從偵錯程式獲得程式的資訊可能比較困難,但並不意味著不可能,可以從反彙編器中獲得
GIt學習第二天之版本回退、工作區和暫存區
搬運自 ‘廖雪峰的官方網站’ 地址:https://www.liaoxuefeng.com/ 1.版本回退 在Git中,我們用git log命令顯示從最近到最遠的提交日誌,如果嫌輸出資訊太多,看得眼花繚亂的,可以試試加上--pretty=oneline引數: 你看到的一大串類
GIT版本回退、工作區和暫存區、管理修改、提交修改、撤銷修改、刪除檔案
git status命令可以讓我們時刻掌握倉庫當前的狀態。比如哪個檔案被修改過,並且是否提交過。 git diff具體檔名.字尾名命令可以檢視某個檔案修改前後的區別,顯示的格式正是Unix通用的diff格式。 版本回退: 版本回退是有條件的,就是你還沒有把自己的本地版本
記憶體、cache和暫存器之間的關係及區別
cache是一個高速小容量的臨時儲存器,可以用高速的靜態儲存器晶片實現,或者整合到CPU晶片內部,儲存CPU最經常訪問的指令或者操作資料。而暫存器不同,暫存器是記憶體階層中的最頂端,也是系統獲得操作資料的最快速途徑。三者之間的順序就是 :記憶體-cahe-暫存器此外,暫存器
1.4 x86 CPU地址空間分配和暫存器訪問
1、基本概念 cpu地址空間和pci地址空間是兩個常用的比較容易混淆的概念,特別是其中不同系列的cpu的實現還各不相同:x86系列cpu地址空間和pci地址空間是重合的,即為同一空間;而非x86 cpu的cpu地址空間和pci地址空間為兩個獨立的空間。 也許
計算機中記憶體、cache和暫存器之間的關係及區別
1. 暫存器是中央處理器內的組成部份。暫存器是有限存貯容量的高速存貯部件,它們可用來暫存指令、資料和位址。在中央處理器的控制部件中,包含的暫存器有指令暫存器(IR)和程式計數器(PC)。在中央處理器的算術及邏輯部件中,包含的暫存器有累加器(ACC)。 2. 記憶體包含的範圍
Git之——Git工作區、版本庫和暫存區
Git暫存區(stage)是比較難理解的部分,也是Git的特色之一,那麼它和工作區與版本庫之間的聯絡又是怎樣的,在這之前,應該先記住如下點: 1、所說的版本庫就是隱藏的.git目錄。 2、檔案 .git/index是記錄了檔名、檔案的狀態資訊(時間戳、檔案長度等)等的檔案索
第005課 計算機單位和暫存器
計算機單位換算 單位換算 微米,毫米,釐米,分米....... 1Byte = 8Bit 1M = 1024KB 1G = 1024M 1個字母在計算機中佔一個位元組,8個位。 位寬 1個位元組 256 2個位元組 65
中斷,異常,系統呼叫,程序切換時的堆疊變化和暫存器儲存
1. 中斷,異常,系統呼叫相同: CPU自動壓入: ss 執行級別提升時需切換堆疊,因此多壓入
x86彙編——標識暫存器
CF(進位標誌): 1 算術操作最高位產生了進位或借位 0 最高位無進位或借位 PF(奇偶標誌): 1 資料最低8位中1的個數為偶數 0 資料最低8位中1的個數為奇數 AF(輔助進位標誌): 1 D3→D4位產生了進位或借位 0
驅動你的串列埠 和暫存器打交道
/* UART primitives */#define GET_STATUS(p) (*(volatile unsigned *)((p) + USTAT)) // 獲得當前 UART 狀態 //offset?? //因為有了MMU,so要找到Pmemory要加偏移量#define RX_DATA(s)
ARM的7種工作模式、37個通用暫存器、CPSR程式狀態暫存器
一、ARM 採用的是32位架構 1、ARM約定 Byte:8 bits Halfword:16 bits (2 byte) Word:32 bits (4 byte) 2、大部分ARM core 提供 ARM 指令集(32-bit) 每條指令都是4個位元組? Thumb
vs2010中檢視記憶體和暫存器
今天講一下如何從VS2010中檢視記憶體和暫存器狀態,一般來講,只要從事C/C++程式設計的人,基本上對於這篇文章完全可以略過了,但寫這篇文章的初衷在於,自己也是從這一步中過來的,記得當年自己其實也不知道如何快速使用VS中各種工具,導致花了很多時間在查詢資料上面。所以,本文基本上可以說是面向菜鳥級選
[組合語言]立即數定址和暫存器定址
1. 什麼是立即數? 運算元從指令程式碼中得到,即立即數(Immediate),也可以說就是指令的一部分了, 例如: MOV EAX 33221100H ;機器程式碼為 B8 00 11 22 33 ;操作碼為 B8 ;立即數為 33221100 操作
FPGA 查詢表和暫存器等詳解
1.FPGA-現場可程式設計門陣列 每一塊FPGA晶片都是由有限多個帶有可程式設計連線的預定義源組成來實現一種可重構數位電路。 圖1.FPGA不同構成 FPGA晶片說明書中,包含了可程式設計邏輯模組的數量、固定功能邏輯模組(如乘法器)的數目及儲存器資
X86的通用暫存器簡要說明
1.EAX暫存器也成為累加器,用於協助執行一些常見的運算操作以及用於傳遞函式呼叫的返回值。在X86指令集中很多經過優化的指令會有限將資料寫入或讀出EAX暫存器,,在對資料進行進一步運算操作。大多數運算如:加法,減法和比較運算都會藉助使用EAX暫存器來打到指令優化的效果。還有