iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0

今天雖然還是很忙,但太久沒寫 Pwn 了,不能再混了~


接續上次的那題:

#include <stdio.h>
#include <stdlib.h>

void game() {
    long val = 0xdeadbeef;
    char buf[4] = "abcd";

    printf("Input: ");
    scanf("%4s",&buf);

    printf("buf: %s\n",buf);
    printf("val: 0x%08x\n",val);

    if(val == 0xdeadbe00) {
        printf("GOOD!!\n");
    } else {
        printf("BAD!!\n");
    }
}

int main() {
    game();
    return 0;
}

在我們觀察下記憶體前,再多講一個 register:rbp
他是做甚麼用的呢?

低地址
==========================
|    .text (程式碼)       |    //r-x
--------------------------
|    .data (已初始化資料)  |    //rw-
--------------------------
|    .bss (未初始化資料)   |    //rw-
--------------------------
|        ↓ Heap           |   //rw-
--------------------------
|        ↓                |
--------------------------
|                         |
--------------------------
|                         |
--------------------------
|        ↑                |
--------------------------
|        ↑ Stack          |   //rw-
===========================
高地址

還記得我們的 stack 嗎,stack 會從高地址往低地址方向長,而如同我們前幾篇講到的,只要呼叫個函式就會生成一塊 stack 區域來放函式裡的資料(補充:這區域稱為 stack frame)。而 stack 的底(高地址)會用 rbp 指著,stack 的頂(低地址)則會用 rsp 指著。

所以具體來說,執行時會變這樣:
https://ithelp.ithome.com.tw/upload/images/20230924/20163074LsdhRTeffB.png

  • main 也是一個函式,因此也會有 stack frame。執行起來後,首先會先把指在 stack 底部的 ebp push 進去

https://ithelp.ithome.com.tw/upload/images/20230924/20163074vmsPRiolGc.png

  • 將 ebp 更新為 esp 的值,因此現在存在 stack 的 ebp 值是舊的。

https://ithelp.ithome.com.tw/upload/images/20230924/2016307497XxrzvhYB.png

  • 透過調整 esp 來創建出 stack frame 讓 main 可以有空間放區域變數等等的資料。

以上這段修改 register 創建 stack frame 的程式稱為 prologue。

之後將會繼續看呼叫 game 時的狀況。


再來我們來介紹今天的主題:

絲子雜燴

https://ithelp.ithome.com.tw/upload/images/20230924/20163074hVQhpYzaDv.jpg
絲子雜燴是河北八大碗的其中一道料理,絲子雜燴的意思是將食材切絲做成的雜燴。
(找不到圖,因此圖為八大碗,之後再來介紹八大碗。)


上一篇
Day8 大雜燴之辣味噌霜淇淋拉麵 - 工控:防禦
下一篇
Day10 大雜燴之塊子雜燴 - Pwn:Basic(6)
系列文
雜七雜八大雜燴,資安技術大亂鬥30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言