relocation

    0熱度

    1回答

    我正在編譯一個靜態庫,它利用了一些內聯彙編代碼。 我注意到,當我使用標籤爲jmp指令: int foo(){ asm volatile ( "mov 0x60(%r8),%r11d\n\t" "jmp *S_401a70\n\t" ... "S_401a70: xor %rax, %rax\n\t" ... ) } 和編譯代碼到一個靜態

    1熱度

    1回答

    我已經創建了一個簡單的應用程序,並且想要最小化大小。 該應用程序是這樣的: #include "stdafx.h" #include <Windows.h> #pragma comment(linker, "/ENTRY:testfc") #pragma check_stack(off) #pragma runtime_checks("su",off) int testfc()

    0熱度

    2回答

    什麼是可重定位程序和什麼使程序可重定位?從OS內存管理上下文來看,爲什麼程序(進程)需要可重定位?

    0熱度

    2回答

    我有測試C程序:AC int a = 0; static int fa_local() { a = 78; int b; int c; } int fa_global() { a = 7777; fa_local(); } int test() { a = 6666; fa_global(); }

    4熱度

    1回答

    64位Linux默認使用小內存模式,它將所有代碼和靜態數據放在2GB地址限制以下。這確保您可以使用32位絕對地址。老版本的gcc爲靜態數組使用32位絕對地址,以便爲相對地址計算節省額外的指令。但是,這不再有效。如果我嘗試在程序集中創建一個32位絕對地址,則會出現鏈接器錯誤: 「在創建共享對象時無法使用針對`.data'的重定位R_X86_64_32S;使用-fPIC重新編譯」。 這個錯誤信息當然是

    0熱度

    1回答

    我想弄清楚重定位是如何工作的,但我似乎無法擺脫困境。 This document描述了重定位ELF文件時可能遇到的不同類型。 例如,我們以R_ARM_ALU_SB_G0_NC(#70)爲例。 類型:靜態 類:ARM,描述了被搬遷的地點類型(我不明白) 操作:((S + A)| T) - B(S)) 我猜數學表達式是我正在尋找的操作。但是,我並不完全理解這如何適合我的功能。 其中重定位發生的方法,如

    0熱度

    1回答

    我想構建glibc malloc作爲共享庫,而不是它的一部分libc.so 我沒有使用任何chroot,但直接試圖構建它。 當我做的glibc作爲一個正常的構建,其輸出被用來即打造的malloc命令: gcc malloc.c -c -std=gnu99 -fgnu89-inline -O2 -Wall -Winline -Wundef -Wwrite-strings -fmerge-all-co

    0熱度

    1回答

    我徘徊爲什麼一些Windows可執行文件確實有搬遷。爲什麼當一個可執行文件總是可以被加載到任何虛擬地址時,與DLL不同,爲什麼需要它?

    0熱度

    2回答

    #include <stdio.h> #define MAX 1000000 int dp[MAX]; int P[MAX], C[MAX], K[MAX], child[MAX][1000], index[MAX]; int mod = 1000000007; void dfs(int i) { int j = 1; while (j <= index[i])

    1熱度

    1回答

    要解決a Rust compiler bug in the AVR backend,我已經標記了很多我的功能,作爲#[inline(always)],只需添加註釋,直到足夠的情況下優化等會激發我不再遇到問題。 然而,這些註解,現在連接失敗,有很多relocation truncated to fit消息: target/avr-atmega328p/release/deps/chip8_avr-4