【匯編逆向系列】二、函數調用包含單個參數之整型-ECX寄存器,LEA指令

目錄

一. 匯編源碼

二. 匯編分析

1. ECX寄存器

2.?棧位置計算?

3. 特殊指令深度解析

三、 匯編轉化


一. 匯編源碼

single_int_param:0000000000000040: 89 4C 24 08        mov         dword ptr [rsp+8],ecx0000000000000044: 57                 push        rdi0000000000000045: 8B 44 24 10        mov         eax,dword ptr [rsp+10h]0000000000000049: 8D 44 00 01        lea         eax,[rax+rax+1]000000000000004D: 5F                 pop         rdi000000000000004E: C3                 ret000000000000004F: CC                 int         30000000000000050: CC                 int         30000000000000051: CC                 int         30000000000000052: CC                 int         30000000000000053: CC                 int         30000000000000054: CC                 int         30000000000000055: CC                 int         30000000000000056: CC                 int         30000000000000057: CC                 int         30000000000000058: CC                 int         30000000000000059: CC                 int         3000000000000005A: CC                 int         3000000000000005B: CC                 int         3000000000000005C: CC                 int         3000000000000005D: CC                 int         3000000000000005E: CC                 int         3000000000000005F: CC                 int         3

二. 匯編分析

1. ECX寄存器

第一行

mov ? ? ? ? dword ptr [rsp+8],ecx

出現了一個新的寄存器ECX

ECX是32位寄存器,其低16位稱為??CX??,CX可進一步拆分為高8位??CH??和低8位??CL?

例如:若ECX=0x11223344,則CX=0x3344CH=0x33CL=0x44

?分層設計支持靈活處理不同精度的數據操作

在Windows的??fastcall??調用約定中,ECX常作為函數的??第一個整型參數??傳遞寄存器

這個語句的意思就是將函數的第一個參數,存入棧頂地址偏移8個字節的位置,讀取的是一個32位數,即代表一個整型

PS: 注意ECX保存的是第一個整型的參數,如果第一個參數非整型,則不是再EXC寄存器

2.?棧位置計算?

第一行mov ? ? ? ? dword ptr [rsp+8],ecx 將第一個參數放到[rsp+8的位置]

第三行? mov? ?eax,dword ptr [rsp+10h]為什么是操作地址rsp+0x10呢?

這里就涉及到了push rdi之后RSP的地址的變化

初始狀態:

RSP = 0x1000 [RSP+8] = 參數值

執行 push rdi 后:

RSP = 0x1000 - 8 = 0x0FF8

參數位置變為: 0x1000 + 8 = 0x1008 → [RSP+0x10]

3. 特殊指令深度解析

lea eax, [rax+rax+1]?(高效計算)??

  • ??LEA 指令??:Load Effective Address,本用于地址計算
  • ??創新使用??:執行算術運算而不影響標志位
  • ??計算過程??:
輸入: EAX = n
操作: [n + n + 1] = 2n + 1
輸出: EAX = 2n + 1
  • ??優勢??:
    • 比?add eax, eax?+?inc eax?更高效
    • 單條指令完成乘加操作
    • 不修改狀態寄存器(FLAGS)

三、 匯編轉化

根據以上匯編分析得到注釋

single_int_param:0000000000000040: 89 4C 24 08        mov         dword ptr [rsp+8],ecx  ; 保存參數到棧0000000000000044: 57                 push        rdi                    ; 保存 RDI0000000000000045: 8B 44 24 10        mov         eax,dword ptr [rsp+10h] ; 加載參數到 EAX0000000000000049: 8D 44 00 01        lea         eax,[rax+rax+1]        ; 計算 2*EAX + 1000000000000004D: 5F                 pop         rdi                    ; 恢復 RDI000000000000004E: C3                 ret                                ; 返回結果000000000000004F: CC                 int         3                      ; 調試斷點(填充)...(更多填充)

轉華為C語言:

int single_int_param(int param) {// 計算 2*param + 1int result = 2 * param + 1;return result;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83695.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83695.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83695.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux進程替換以及exec六大函數運用

文章目錄 1.進程替換2.替換過程3.替換函數exec3.1命名解釋 4.細說6個exe函數execl函數execvexeclp、execvpexecle、execve 1.進程替換 fork()函數在創建子進程后,子進程如果想要執行一個新的程序,就可以使用進程的程序替換來完成…

Selenium操作指南(全)

🍅 點擊文末小卡片,免費獲取軟件測試全套資料,資料在手,漲薪更快 大家好,今天帶大家一起系統的學習下模擬瀏覽器運行庫Selenium,它是一個用于Web自動化測試及爬蟲應用的重要工具。 Selenium測試直接運行在…

結構性設計模式之Facade(外觀)設計模式

結構性設計模式之Facade(外觀)設計模式 前言: 外觀模式:用自己的話理解就是用戶看到是一個總體頁面,比如xx報名系統頁面。里面有歷年真題模塊、報名模塊、教程模塊、首頁模塊… 做了一個各個模塊的合并,對…

RabbitMQ實用技巧

RabbitMQ是一個流行的開源消息中間件,廣泛用于實現消息傳遞、任務分發和負載均衡。通過合理使用RabbitMQ的功能,可以顯著提升系統的性能、可靠性和可維護性。本文將介紹一些RabbitMQ的實用技巧,包括基礎配置、高級功能及常見問題的解決方案。…

Linux(10)——第二個小程序(自制shell)

目錄 ?編輯 一、引言與動機 📝背景 📝主要內容概括 二、全局數據 三、環境變量的初始化 ? 代碼實現 四、構造動態提示符 ? 打印提示符函數 ? 提示符生成函數 ?獲取用戶名函數 ?獲取主機名函數 ?獲取當前目錄名函數 五、命令的讀取與…

環境變量深度解析:從配置到內核的全鏈路指南

文章目錄 一、基礎概念與核心作用二、常見環境變量三、操作指南:從查看、修改到調試3.1 快速查詢3.2 PATH 原理與配置實踐3.2.1 命令執行機制3.2.2 路徑管理策略 四、編程接口與內存模型4.1 環境變量的內存結構4.2 C 語言訪問方式4.2.1 直接訪問(main 參…

結合Jenkins、Docker和Kubernetes等主流工具,部署Spring Boot自動化實戰指南

基于最佳實踐的Spring Boot自動化部署實戰指南,結合Jenkins、Docker和Kubernetes等主流工具,提供從環境搭建到生產部署的完整流程: 一、環境準備與工具選型?? ??1.基礎設施?? ??Jenkins服務器??:安裝Jenkins LTS版本,配置JDK(推薦JDK 11+)及Maven/Gradle插…

動態規劃---股票問題

1.在推狀態轉移方程的途中,箭頭的起始點表示前一天的狀態,箭頭的終點是當天的狀態 2.當動態規劃中涉及到多狀態,且狀態之間可以相互轉換,要畫圖去分析 1.買賣股票的最佳時機含冷凍期 題目鏈接:309. 買賣股票的最佳時機…

ObjectMapper 在 Spring 統一響應處理中的作用詳解

ObjectMapper 是 Jackson 庫的核心類,專門用于處理 JSON 數據的序列化(Java 對象 → JSON)和反序列化(JSON → Java 對象)。在你提供的代碼中,它解決了字符串響應特殊處理的關鍵問題。 一、為什么需要 Obj…

總結這幾個月來我和AI一起開發并上線第一個應用的使用經驗

副標題: 當“手殘”前端遇到AI隊友,我的音樂小站譜貝誕生記 大家好,我最近干了件“不務正業”的事——**獨立開發并上線了一個完整的網站 作為一個前端“手殘黨”(還在努力學習中😅),這次能成功…

【大模型:知識圖譜】--5.neo4j數據庫管理(cypher語法2)

目錄 1.節點語法 1.1.CREATE--創建節點 1.2.MATCH--查詢節點 1.3.RETURN--返回節點 1.4.WHERE--過濾節點 2.關系語法 2.1.創建關系 2.2.查詢關系 3.刪除語法 3.1.DELETE 刪除 3.2.REMOVE 刪除 4.功能補充 4.1.SET (添加屬性) 4.2.NULL 值 …

結構體指針與非指針 問題及解決

問題描述 第一段位于LCD.h和LCD.c中, 定義個一個結構體lcd_params,并直接給與指針名*p_lcd_params; 我發現我在調用這個結構體時,即在LCD.c中,使用指針類型定義的 static p_lcd_params p_array_lcd[LCD_NUM]; static p_lcd_par…

【設計模式-3.7】結構型——組合模式

說明:本文介紹結構型設計模式之一的組合模式 定義 組合模式(Composite Pattern)又叫作整體-部分(Part-Whole)模式,它的宗旨是通過將單個對象(葉子節點)和組合對象(樹枝…

【TMS570LC4357】之相關驅動開發學習記錄2

系列文章目錄 【TMS570LC4357】之工程創建 【TMS570LC4357】之工程配置修改 【TMS570LC4357】之HALCOGEN使用 【TMS570LC4357】之相關問題及解決 【TMS570LC4357】之相關驅動開發學習記錄1 ——————————————————— 前言 記錄筆者在第一次使用TMS570過程中對…

3D Gaussian splatting 05: 代碼閱讀-訓練整體流程

目錄 3D Gaussian splatting 01: 環境搭建3D Gaussian splatting 02: 快速評估3D Gaussian splatting 03: 用戶數據訓練和結果查看3D Gaussian splatting 04: 代碼閱讀-提取相機位姿和稀疏點云3D Gaussian splatting 05: 代碼閱讀-訓練整體流程3D Gaussian splatting 06: 代碼…

【黑馬程序員uniapp】項目配置、請求函數封裝

黑馬程序員前端項目uniapp小兔鮮兒微信小程序項目視頻教程,基于Vue3TsPiniauni-app的最新組合技術棧開發的電商業務全流程_嗶哩嗶哩_bilibili 參考 有代碼,還有app、h5頁面、小程序的演示 小兔鮮兒-vue3ts-uniapp-一套代碼多端部署: 小兔鮮兒-vue3ts-un…

前端使用 preview 插件預覽docx文件

目錄 前言一 引入插件二 JS 處理 前言 前端使用 preview 插件預覽docx文件 一 引入插件 建議下載至本地,靜態引入,核心的文件已打包(前端使用 preview 插件預覽docx文件),在文章目錄處下載至本地,復制在項…

如何在運動中保護好半月板?

文章目錄 引言I 半月板的作用穩定作用緩沖作用潤滑作用II 在跳繩運動中保護好半月板III 半月板損傷自測IV 半月板“殺手”半月板損傷必須滿足四個因素:消耗品引言 膝蓋是連接大腿骨和小腿骨的地方,在兩部分骨頭的連接處,墊著兩片半月形的纖維軟骨板,這就是半月板。半月板分…

安科瑞防逆流方案落地內蒙古中高綠能光伏項目,筑牢北疆綠電安全防線

一、項目概況 內蒙古阿拉善中高綠能能源分布式光伏項目,位于內蒙古烏斯太鎮,裝機容量為7MW,采用自發自用、余電不上網模式。 用戶配電站為35kV用戶站,采用兩路電源單母線分段系統。本項目共設置12臺35/0.4kV變壓器,在…

1.3 fs模塊詳解

fs 模塊詳解 Node.js 的 fs 模塊提供了與文件系統交互的能力,是服務器端編程的核心模塊之一。它支持同步、異步(回調式)和 Promise 三種 API 風格,可滿足不同場景的需求。 1. 模塊引入 const fs require(fs); // 回調…