memory-segmentation

    1熱度

    1回答

    當我看看Olly中的寄存器窗口時,我看到代碼段和數據段寄存器跨越整個內存空間。這是否意味着它們相互重疊? 當我查看內存映射時,似乎它填充了代碼區和數據區。 謝謝

    0熱度

    1回答

    這裏我在兩個不同的終端上運行兩個相同程序的實例。它們的過程地圖是 在第一終端 - [email protected]:~$ pmap 6548 6548: ./a.out 0000000000400000 4K r-x-- /home/vikram/a.out 0000000000600000 4K r---- /home/vikram/a.out 0000000000601000

    1熱度

    2回答

    當我嘗試編譯以下C代碼時,出現總線錯誤。 我猜測它與我調用memcpy的方式有關,但是我無法弄清楚。 任何幫助將不勝感激! #include<stdio.h> #include<stdlib.h> #include<string.h> int main() { char *p = (char*)malloc(sizeof(char)*11); // Assign s

    0熱度

    1回答

    我有一個ELF可執行文件,我想知道如何修改它的.rodata段。 此外,更一般地說,我如何修改ELF可執行文件?

    3熱度

    3回答

    如果這個問題被認爲太瑣碎了,我很抱歉,但是我花了大量的時間嘗試在網上找到一個簡單的答案,並且不能。 我最近在一個介紹編程課上閱讀了關於程序分割的內容,以及程序如何劃分爲「片段」,這些片段在需要時被單獨加載到內存中(或部分加載到內存中,通過分頁......我想)。我們的書中提到,程序常常根據邏輯分區劃分成不同的部分,例如堆棧段,用於堆,爲全局常量,等等 我想知道究竟是什麼決定了這個細分是如何工作的。

    1熱度

    2回答

    我一直在開發一個32位操作系統,我想允許程序從內核中分離出各個段。 爲此,我需要製作SS,而DS寄存器實際上指向程序堆棧和.data節。 從我的研究中我相信這是通過設置本地描述符表來完成的。 我假設這和GDT非常相似,LDT是通過lldt加載的。 但是,我沒有得到我的細分設置後,如何使用這個。誰能解釋一下?

    2熱度

    3回答

    我發現一個常量字面get被放置在程序的數據段中(來自SO),並且是隻讀的,因此行「s [0] ='一個''會導致一個錯誤,這實際上確實發生了,當我取消註釋該行並跑了。但是,當我查看MS VS中的內存窗口時,變量全部放在內存中。我很好奇他們(編譯器)如何強制對's'進行只讀訪問? #include <iostream> int main(void) { char *s = "102

    2熱度

    1回答

    我正在閱讀有關x86分段保護的blog post。 RPL可以和DPL不同嗎?如果有的話,這是什麼用途?

    1熱度

    1回答

    我對彙編非常陌生,並試圖通過理解反彙編舊版16位dos遊戲(由IDA Free生成的反彙編) 。 我在該代碼中讀到2件事情,我想,它猜到它做了什麼。不過我真的不知道,如果我是正確的,所以我想檢查(這裏只是縮短了示例代碼BTW): 1) lds di, some_adress ; (eg: ds = 0012h, di=BAF6h afterwards) xor cx, cx mov [di],

    1熱度

    2回答

    經過相當多的谷歌搜索和一些提示here,我終於設法FS段(由windows用來存儲TIB數據)的find a layout。特別感興趣的我是在PSDK提供的ArbitraryUserPointer成員: typedef struct _NT_TIB { struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList; PVOID Sta