stack-pointer

    3熱度

    1回答

    我想抓住FreeBSD中的彙編程序。在handbook's code example for a UNIX filter中,寄存器esp會在每次系統調用後重置。有問題的代碼是: %include 'system.inc' section .data hex db 'ABCDEF' buffer db 0, 0, ' ' section .text global _start _st

    1熱度

    4回答

    我已經學習了一會兒的程序集,現在我已經開始掌握它了,但是我似乎無法理解的一件事就是爲什麼我們需要遞減堆棧指針離開漫遊本地變量,來看看下面的代碼:在這個小程序(64位GNU編譯器編譯代碼,AT & T語法) pushq %rbp movq %rsp, %rbp subq $48, %rsp call __main movl $0, -4(%rbp) movl $4, -8(%rbp)

    0熱度

    1回答

    已知%rsp指向堆棧幀的頂部,並且指向堆棧幀的基址。然後,我不明白爲什麼RBP%爲0x0在這段代碼: (gdb) x/4xg $rsp 0x7fffffffe170: 0x00000000004000dc 0x0000000000000010 0x7fffffffe180: 0x0000000000000001 0x00007fffffffe487 (gdb) disas HelloWorl

    0熱度

    1回答

    當堆棧指針移回原來的位置時,會發生什麼情況,但保存在堆棧中的值沒有從內存加載到寄存器文件中?即當堆棧指針移回時,值仍然存在於堆棧內存中。

    4熱度

    1回答

    我被要求在使用C函數時在程序集中創建一個小程序。在這樣做的時候,我想知道一些具體的事情。 我知道,與大會工作的時候,只要我想打電話給C函數,我必須推動它的參數堆棧,該函數返回後,我一定要彈出這些參數(或加4 × X到esp ,其中x代表推送參數的數量)。 我的問題是這樣的: 當調用特別是C函數exit,我必須首先推動的狀態參數。假設我想推0來表示我的程序沒有錯誤地工作。 知道exit函數沒有返回,

    1熱度

    1回答

    我不確定我是否正確理解dds esp或其64位對應部分dqs rsp的原始輸出。當我看到堆棧中的條目列表時,我傾向於認爲,無論我看到返回地址的哪個位置,都是尚未返回的代碼調用。 IOW,將它們串在一起應該形成一個很好的調用堆棧。 (現在讓我們不用爲k*一組Windbg命令而煩惱。)情況並非總是如此嗎? 由於存在一些第三方擴展,它對esp/rsp輸出進行操作,並將條目串起來看起來像一個調用堆棧,但似

    0熱度

    1回答

    我有一個struct「Layer」和class「LayerHandler」。圖層只包含紋理,精靈和兩個構造函數 - 一個是默認的,另一個是引用參數。 LayerHandler類是處理所有圖層的繪圖的類。我爲這個類添加圖層,稍後我使用win.draw(layerhandler_object)繪製所有內容。 LayerHandler從Drawable繼承,這樣做會覆蓋virtual void draw

    1熱度

    1回答

    鏈接到:How to get a call stack backtrace?(GCC,MIPS,no frame pointer) 我通過使用匯編代碼和用戶堆棧迭代函數來再現調用堆棧(更多細節請參見上面的鏈接)。 我必須找到每個函數前面$ SP,大部分功能開始下面的指令: addiu sp, sp, -80 我不難得出結論,從操作碼之前的$ SP。 問題是我發現即使使用堆棧也不會改變$ sp的函數

    2熱度

    1回答

    所以我必須編寫一個調用extern C函數的彙編程序。所以我寫了簡單的pow函數,我用這個C代碼編譯我的彙編程序。一切正常。但正如我從gcc的-S命令看到的那樣,編譯器爲局部變量創建了一個空間。我認爲它會是這樣的: int func(int number) { int a = 10; int b = 5; int c = 0; } 我們有3個局部變量,所以編譯

    1熱度

    2回答

    所以,我最近做了一個代碼來計算C代碼和MIPS代碼中二進制1的數量。我通過使用餘數值並增加一個count_one變量在C中這樣做。在MIPS中,我做了同樣的程序,但我移動了數字的字節,直到它將所有的1計算在內。不過,我想試着學習如何使用指針,但我似乎無法理解這個概念。我的MIPS代碼如下: .data prompt: .asciiz "Enter a integer: " .text