編譯的問題,編譯的兩個問題!!

發布 科技 2024-02-08
11個回答
  1. 匿名使用者2024-02-05

    推送 ebp 保持 ebp,sub esp,80h 在堆疊中分配區域性變數,大小為 80h

    MOV EBP,ESP 使用 EBP 來指示當前函式的區域性變數、當前函式的引數以及當前函式的返回位址。

    mov [ebp+04h], eax [ebp+04h] 儲存當前函式的返回位址,此處修改返回位址,返回 EAX 指向的位址,在當前函式執行完畢後繼續執行。

    push 0 是乙個函式引數。

    push 'ayra'壓入功能引數。

    push 'rbil'壓入功能引數。

    push 'daol'壓入功能引數。

    推送 esp press-in 函式引數。

    推送 edi press-in 函式引數。

    call dword ptr ss:[ebp+04h] //call(eax)。呼叫函式由 eax 表示,[ebp+04h]=eax

    mov [ebp+08h],eax 獲取 call(eax) 的返回結果,寫入 [ebp+08h],這是當前函式的引數。 由於引數的值被修改,因此該引數是指標或引用。

    1:如果 push ebp、sub esp 和 80h 是函式的開頭(即呼叫指令跳到這裡),那麼使用暫存器傳遞函式引數,eax 和 edi 都是函式引數。

    2:既然當前函式的返回位址壞了,那麼後面應該有修復操作(A:平衡棧和跳轉 B:重寫[EBP+04] C:其他要修復的操作)。

    3:這是乙個shell程式(很可能是由win32程式集編寫的)嗎? 這一段的資訊太少,無法根據上下文來判斷,只能分析這麼多。

  2. 匿名使用者2024-02-04

    無緣無故的關於你的話題的程式太多了,雖然我學過編譯,但我看不懂。

    這裡沒有太多的邏輯,最好新增偽指令,以便每個人都可以做到。

    堆疊之所以進出堆疊,是因為有些暫存器儲存了臨時變數,但是沒有地方放它的初始值,所以只能先儲存,然後再從堆疊中取出,返回原始值。

  3. 匿名使用者2024-02-03

    要從整體上看程式,可以根據上下文檢視程式的某個部分做什麼以及為什麼要這樣做。

    上帝甚至無法理解這一段,他也說不出他為什麼這樣寫。

  4. 匿名使用者2024-02-02

    在你的問題中。

    前 3 個原因:

    push ebp

    sub esp,80h ;為什麼要這樣寫。

    mov ebp,esp ;為什麼要這樣寫。

    mov [ebp+04h],eax ;為什麼要這樣寫。

    這些都是在啟動子程式之前必須完成的事情。

    其作用是使 EBP ESP 指向子程式,以便 CPU 可以執行子程式,當子程式結束時,它可以使 EBP ESP 返回呼叫子程式的地方。

    還有 2 個原因:

    push 0

    push 'ayra'

    push 'rbil'

    push 'daol'

    push esp ;為什麼要這樣寫。

    push edi ;為什麼要這樣寫。

    讓我告訴你乙個技巧。

    呼叫前的推送通常是呼叫函式的引數。

    例如,呼叫 messagebox、hwnd、lptext、lpcaption、utype,這實際上是執行的推送 utype

    push lpcaption

    push lptext

    push hwnd

    call messagebox

    還有乙個原因。

    call dword ptr ss:[ebp+04h] ;為什麼要這樣寫。

    因為你正在拆解它**,所以你或主人很難分辨出這個電話是什麼。

    這會導致 SS 指向的 SS:[EBP+04H] 位置,以檢視它是什麼。

    最後乙個 1 為什麼。

    mov [ebp+08h],eax ;為什麼要這樣寫。

    呼叫子例程的結果通常放在 EAX 中

    這句話的意思就是把返回結果EAX的內容傳遞給變數[EBP+08H]。

  5. 匿名使用者2024-02-01

    code segment

    assume cs:code

    start:

    mov bl,0 ;bl 存款的數量。

    mov si,1000h

    mov cx,10

    op:cmp [si],0

    jne op2

    inc bl ;如果為零,則加 1。

    op2:inc si

    loop op;判斷比較的次數。

    mov dl,bl;輸出數量。

    mov ah,2h

    int 21h

    code ends

    end start

  6. 匿名使用者2024-01-31

    就是以16位元組的Qi為乙個和嶺單位,如果小於16位元組,就算作16位元組。

    n 16 + 1) * 16 = n(整數部分)+ 16,例如 16 個位元組,佔 16 個位元組。

    17 位元組,即 32 位元組。

    30 位元組,這也是 Answer 分支佔 32 位元組。

  7. 匿名使用者2024-01-30

    next: add [bx+8],sum ;非法記憶體早期核心引用、源運算元和目標運算元不能同時是記憶體。

    add [bx+7],30h ;目標運算元需要指定資料型別,並將其更改為:add byte ptr [bx+7], 30h

    或 Swift Liquid。 add word ptr [bx+7],30hadd [bx+8],30h ;目的運算元需要指定 Luchang 挖掘型別的數量。

  8. 匿名使用者2024-01-29

    缺乏具體分析的條件!

  9. 匿名使用者2024-01-28

    ;上述程式:

    mov dptr, #

    mov r2, #50 ;迴圈 50 個迴圈:

    mov dph, #01000000b ;源位址比 movx a 高 8 位,@dptr

    mov dph, #00100000b ;目標高八位 MOVX @dptr、A

    inc dptr

    djnz r2, loop

    sjmp $

    結束---以下程式:

    mov dptr, #

    mov r2, #50 ;迴圈 50 個迴圈:

    mov dph, #10000000b ;源位址比 movx a 高 8 位,@dptr

    mov dph, #00100000b ;目標高八位 MOVX @dptr、A

    inc dptr

    djnz r2, loop

    sjmp $end

  10. 匿名使用者2024-01-27

    是否看到 DX 和 AL 指定的位址相同? 如果不同也沒關係。

  11. 匿名使用者2024-01-26

    彙編比C語言更接近硬體,所以你需要學習微機的原理和微控制器的知識。

相關回答
14個回答2024-02-08

我覺得沒關係,現在系統多是用C語言寫的,但是一開始可能用C語言寫的,然後系統比較大,很難改成C++,因為系統比較大,所以我覺得用C++寫就好了,好控制,當然, 速度是要打折扣的,但穩定性和靈活性應該更重要,畢竟慢總比不可修改和舊的崩潰好,C++的速度也不比C差多少,甚至在某些地方更快,因為現在C++的開發比CA快得多 Bjarne Stroustrup說, 學習 C 只是為了處理被當作遺產的**,呵呵。我想知道這是否有點過分? >>>More

12個回答2024-02-08

1.因為火一般是可燃的,可用或正在使用的工具被氧化成二氧化碳,工具不能使用,這是一種損失,所以人們會變得悲傷; >>>More

10個回答2024-02-08

組合語言可以說是機器語言,直接與硬體打交道的是將計算機語言轉化為機器可以識別的1001。 它不會過時,至少在這十年內不會。 不過,這主要是關於硬體方面。 >>>More

9個回答2024-02-08

1 金屬表面產生氣泡 溶液由無色變為淺綠色。 >>>More

10個回答2024-02-08

特洛伊木馬不清楚,您只是在籠統地解釋 MOV 指令的含義,而沒有解釋具體的定址過程。 >>>More