64位機器使用嵌入式彙編自己實現mmap系統呼叫

2021-08-21 19:40:06 字數 747 閱讀 6306

環境: centos(6.5 64位) gcc 4.4.7 20120313 核心 2.6.32-431.el6.x86_64 

對於mmap的系統呼叫引數傳遞,引數傳遞對應的暫存器如下:

void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);

addr:   %rdi

length: %rsi

prot:   %edx

flags:  %r10d

fd:     %r8d

offset: %r9

在實現自己的mmap的時候除了flags引數對應的暫存器應用層和sys_mmap不一樣外,其餘的都是對應的,

所以在下面的**中我們只用嵌入式彙編來修改flags對應的暫存器,即把flags值放入%r10d中

然後傳入$9即__nr_mmap系統呼叫號到%eax中,然後在用系統呼叫命令syscall來進行系統呼叫,返回值在

%rax中,**如下

#include #include #include #include #include #include #include void *mymmap(void *addr, size_t length, int prot, int flags,

int fd, off_t offset)

int main(int argc,char *argv)

64位機器使用PLSQL(無需安裝32位客戶端)

64位win7,本機安裝了oracle11g 64位服務端,不安裝32位客戶端的情況下使用plsql 2.解壓到 任意路徑 3.在環境變數的path裡面新增壓縮包的路徑,放到最前面。4.新增環境變數tns admin,內容是tnsnames.ora檔案的路徑 5.在plsql的首選項裡,oracle...

在64位機器使用CMake編譯32位程式

在幫 去看電影的 wsf 同學做 ddl 作業的時候,遇到以下題目 設有語句如下 char c1 char c2 6 32 位系統中下面哪一種說法是正確的?a.sizeof c1 加4 等於sizeof c2 b.sizeof c1 加6 等於sizeof c2 c.sizeof c1 大於size...

嵌入式linux 彙編碼和機器碼

使用點亮led的簡單程式分析其彙編碼和機器碼,通過直接修改bin檔案中的機器碼修改功能,點亮其他的led燈。首先修改makefile檔案把elf檔案反彙編生成dis檔案,檢視其真正的彙編指令 all arm linux gcc c o led on.o led on.s arm linux ld t...