linux修改棧指針x86,為什么x86-64 Linux系統調用會修改RCX,這個值意味著什么?

我正在嘗試使用sys_brk syscall在linux中分配一些內存.這是我嘗試過的:

BYTES_TO_ALLOCATE equ 0x08

section .text

global _start

_start:

mov rax, 12

mov rdi, BYTES_TO_ALLOCATE

syscall

mov rax, 60

syscall

根據linux調用約定,我希望返回值在rax寄存器中(指向已分配內存的指針).我在gdb中運行它,在進行sys_brk系統調用之后,我注意到以下寄存器內容

在系統調用之前

rax 0xc 12

rbx 0x0 0

rcx 0x0 0

rdx 0x0 0

rsi 0x0 0

rdi 0x8 8

在系統調用之后

rax 0x401000 4198400

rbx 0x0 0

rcx 0x40008c 4194444 ;

rdx 0x0 0

rsi 0x0 0

rdi 0x8 8

在這種情況下,我不太了解rcx寄存器中的值.哪一個用作指向我用sys_brk分配的8個字節的開頭的指針?

解決方法:

請注意,sys_brk的界面與brk / sbrk POSIX函數略有不同;請參閱C library/kernel differences section of the Linux brk(2) man page.具體來說,Linux sys_brk設置程序中斷; arg和返回值都是指針.見Assembly x86 brk() call use.這個答案需要upvotes,因為它是該問題上唯一的好處.

你問題的另一個有趣的部分是:

I do not quite understand the value in the rcx register in this case

您正在看到syscall/sysret指令如何設計為允許內核恢復用戶空間執行但仍然很快的機制.

系統調用不執行任何加載或存儲,它只修改寄存器.它不使用特殊寄存器來保存返回地址,而只使用常規整數寄存器.

在內核返回到用戶空間代碼之后,RCX = RIP和R11 = RFLAGS并不是巧合.這種情況的唯一方法是,如果ptrace系統調用在內核中修改了進程保存的rcx或r11值. (ptrace是gdb使用的系統調用).在這種情況下,Linux將使用iret而不是sysret返回用戶空間,因為較慢的通用情況iret可以做到這一點. (有關Linux系統調用入口點的一些演練,請參閱What happens if you use the 32-bit int 0x80 Linux ABI in 64-bit code?.但是,大多數情況下,32位進程的入口點,而不是64位進程中的系統調用.)

而不是將返回地址推送到內核堆棧(如int 0x80),系統調用:

>設置RCX = RIP,R11 = RFLAGS(因此在執行系統調用之前,內核甚至無法查看這些寄存器的原始值).

>使用配置寄存器(IA32_FMASK MSR)中的預配置掩碼屏蔽RFLAGS.這讓內核禁用中斷(IF),直到它完成swapgs并將rsp設置為指向內核堆棧.即使將cli作為入口點的第一條指令,也會有一個漏洞的窗口.你也可以通過屏蔽DF來免費獲得cld,所以即使用戶空間使用了std,rep movs / stos也會向上移動.

有趣的事實:AMD首次提出的系統調用/交換設計并未掩蓋RFLAGS,而是掩蓋了they changed it after feedback from kernel developers on the amd64 mailing list(在?2000年,比第一個芯片早幾年).

>跳轉到配置的系統調用入口點(設置CS:RIP = IA32_LSTAR).我想,舊的CS值不會保存在任何地方.

>它沒有做任何其他事情,內核必須使用swapgs來訪問保存內核堆棧指針的信息塊,因為rsp仍然有來自用戶空間的值.

因此,系統調用的設計需要一個系統調用ABI,其中注冊符號,這就是為什么這些值是它們的原因.

標簽:linux,assembly,x86-64,system-calls

來源: https://codeday.me/bug/20190828/1749140.html

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

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

相關文章

wordpress phpmyadmin_西部數碼使用指南:虛擬主機WordPress部署SSL注意事項

版權歸西部數碼所有,原文鏈接:https://www.west.cn/faq/list.asp?unid2068注意事項:1.如果您的主題/插件使用絕對地址調用了http請求可能會導致網站打開會亂碼,或不能有綠鎖標識,需要聯系程序提供商將所有http請求修改…

android html轉pdf工具,android – 使用iText庫將html轉換為pdf時未應用hr的內聯CSS

我是.NET開發人員,因此代碼在C#中.但是你應該能夠輕松翻譯以下內容.iText是一個PDF優先的庫,[X] HTML解析非常復雜,因此在這方面并不完整.每當解析[X] HTML并且事情不按預期的方式進行特定標記時,您應遵循的基本步驟是:>驗證XML Worker支持標記:Tags …

python 小說爬蟲_從零開始寫Python爬蟲 --- 1.7 爬蟲實踐: 排行榜小說批量下載

從零開始寫Python爬蟲 --- 1.7 爬蟲實踐: 排行榜小說批量下載Ehco 5 個月前 本來只是準備做一個爬起點小說名字的爬蟲,后來想了一下,為啥不順便把小說的內容也爬下來呢?于是我就寫了這個爬蟲,他爬下了各類小說排行榜上…

java 某個字符在字符串中出現的所有位置_Java面試常考核心概念

這篇文章專注于Java基礎知識,不涉及List、Map、多線程、鎖相關的內容,需要的可以查看我的其他博客hofes blog?hhf443.github.ioJDK&JRE&JVMJDK(Java Development Kit)是針對 Java 開發員的產品,是整個 Java 的…

lan交換和無線教師手冊_簡單幾步,無線路由器變交換機

當原來的路由器lan口不夠用,可以加一個交換機擴展lan口數量,如果需要增加的lan口數量不超過3個可以考慮找臺不用的無線路由器當交換機用。另外,隨著交換機更新家中都有舊無線路由器閑置,完全可以再次利用。下面看一下,…

Linux fast open,Linux內核3.7 TCP Fast Open驗證實例

Linux內核在3.6和3.7合入了TCP Fast Open特性,在3.7.3版本上驗證了一下,I did it!以下是C語言實例():server端代碼:#include /* See NOTES */#include#include#includeint main(){int portno 5060;socklen_t clilen;char buffer[…

vue 怎么全局到入常量_Vue 中如何定義全局的變量和常量(轉)

17.6k 次閱讀 讀完需要 10 分鐘7Vue 中如何定義全局的變量和常量我想要定義一個變量, 在項目的任何地方都可以訪問到, 不需要每一次使用的時候, 都引入.嘗試1:創建 global.js 并且在其中定義let a 10;在入口文件中引入 global.jsimport ./global.js在項目中使用:a// 報錯發…

revit找不到附加模塊程序集_TensorFlow基礎知識——常用模塊(一)

1本節簡述對于開展深度學習開發的目標而言,我們需要掌握的除了必要的深度學習理論基礎、必要的開發依賴庫基礎知識、基本的開發套路之外,我們還需要掌握它常見的外圍小幫手都有哪些。這些小幫手就是深度學習依賴庫中的其他并不是核心的模塊,但…

android搭建opencv開發環境,Android Studio搭建opencv開發環境

文章不配圖片,閱讀需要有Android開發基礎并熟悉Android Studio。一、搭建基于Java開發環境以下內容介紹如何搭建基于Java jni的opencv開發環境。1、準備工作從opencv官網下載Android平臺開發sdk并解壓,假設解壓后文件夾名為opencv-4.3.0-android-sdk。(此…

99 網絡編程_網絡工程師技能圖譜,看看你會多少技能

技術推動了時代變革,互聯網則加速了這場變革。在蓬勃發展的互聯網浪潮下,網絡作為基礎設施的關鍵紐帶保障著網路流量的順利流通,維持著賽博世界的繁榮。而在這繁榮之下,生存著這樣一個群體——網絡工程獅,為網絡紐帶保…

python 3.8.0安卓_Python for Mac v3.8.0 官方最新版

Python for Mac是一款全新推出的編程工具,所有 python.org macOS 安裝程序都附帶了 OpenSSL 的內置副本。此外,還有一個針對 macOS 10.9 的新增安裝程序變體,其中包含 Tcl / Tk 8.6的內置版本,有需要的朋友快來下載試試吧!Python …

線程join_Java 并發編程:線程間的協作(wait/notify/sleep/yield/join)

點擊上方“Coder編程”,選擇“置頂公眾號”技術文章第一時間送達!并發編程.png每天進步一點,不做curd工程師與Api調用工程師 歡迎訪問個人博客網站:https://www.coder-programming.cn/ 作者:liuxiaopeng | http://www…

4位先行進位電路 logisim_你真的了解74系列集成電路嗎?讓我幫你總結一下

74系列集成電路大致可分為6大類:74(標準型)74LS(低功耗肖特基)74S(肖特基)74ALS(先進低功耗肖特基)74AS(先進肖特基)74F(高速)HC為COMS工作電平;HCT為TTL工作電平,可與74LS系列互換使用HCU適用于無緩沖級的CMOS電路。這9種74系列產品&#xf…

android ios av tv,iOS使用AVPlayer制作戰旗TvDEMO OC版

在視頻教學中看到一個別人寫的戰旗TvDEMO寫得很好,于是自己動手試著制作一個。效果如下圖所示主界面豎屏播放橫屏播放點擊出現工具欄視頻播放使用的是AVPlayer,具體的使用方式如下//---PlayView---_playView [[UIView alloc]init];_playView.frame CGRectMake(0, …

matlab 子圖title的位置_matlab 畫圖基本介紹

1.在命令窗口輸入命令時&#xff0c;可以不必每輸入一條命令就按enter鍵執行&#xff0c;可以在輸入幾行后一同運行。方法是&#xff1a;換行時&#xff0c;只要在按住<shift>鍵的同時按<enter>鍵即可&#xff0c;否則matlab就會執行上面輸入的所有語句。2.如何將數…

python程序打包成安卓app教程_Python打包方法基本應用方式介紹

Python編程語言是一款功能強大的免費開源的通用型計算機程序應用語言&#xff0c;對于經驗豐富的開發人員來說&#xff0c;掌握這樣一款語言在其程序開發中是一個比較重要的選擇。我們今天就先來了解一下python打包方法的相關應用。 一、簡介 py2exe是一個將Python腳本轉換成wi…

android添加刪除項目,編寫android計算器添加刪除按鈕,出現很抱歉,XX項目已停止運行。...

這是刪除按鈕監聽代碼&#xff1a;//del 按鈕的監聽btnDel (Button) findViewById(R.id.delete);btnDel.setOnClickListener(new OnClickListener() {Overridepublic void onClick(View view) {btnDel.setOnClickListener(this);//短按//btnDel.setOnLongClickListener(this);…

二元一次方程有唯一解的條件_人教版初中數學七年級下冊用適當方法解二元一次方程組公開課優質課課件教案視頻...

解二元一次方程組---加減法一、教學目的&#xff1a;1&#xff0e;使學生掌握用加減法解二元一次方程組的步驟。2&#xff0e;熟練運用加減法解二元一次方程組。3&#xff0e;培養學生分析問題、解決問題的能力。二、教學重點、難點和關鍵&#xff08;一&#xff09;重點&#…

為什么從網頁上打印怎們好像被縮放_全網最詳細關于3D打印的zbrush技術

這個小教程旨在為剛開始對3D打印感興趣的新人朋友提供一些快速上手小技巧&#xff0c;以便在zbrush中制作適合桌面FDM 3D打印的創作&#xff0c;本次小教程需要讀者已經有一些zbrush基礎知識。1設置系統單位導入1英尺的box&#xff0c;1英尺X1英尺X1英尺。一旦導入到場景中&…

android圖片瀏覽遠近,快圖瀏覽編輯圖片方法介紹_怎么編輯圖片_3DM手游

既然是圖片管理工具&#xff0c;那么快圖瀏覽肯定也是少不了圖片編輯功能的。如何使用快圖瀏覽編輯圖片呢&#xff1f;下面小編帶來的詳細的使用方法&#xff0c;有需要的小伙伴一起來看看吧&#xff01;編輯照片方法介紹&#xff1a;1.第一步&#xff0c;下載安裝快圖瀏覽&…