誰かがアセンブリ言語で呼び出し先と呼び出し元を理解するのに役立つ実際の例を教えてもらえますか? 私はほとんどの情報源を調べてきましたが、それでも呼び出し先と呼び出し元を区別する方法がわかりません。前もって感謝します。(私はこの説明を追加しています - ありがとうございました! 私はここで新しいコードで申し訳ありませんが、適切に表示するコードを挿入する方法がわかりません) 私はこのコードを理解しようとしています - アセンブリの基本を学んでいます. 各コマンドにコメントを追加しようとしています(私のような他の誰かもそれを必要とするでしょう:
sub_401040 proc near
.text:00401040
.text:00401040
.text:00401040 000 push ebp ; Push the content of ebp register onto the stack
.text:00401041 004 mov ebp, esp ;Allocating 8 bytes of storage ; move the esp register content into ebp register
.text:00401043 004 push ecx
.text:00401044 008 mov eax, [ebp+8]
.text:00401047 008 push eax ; Push eax contents onto the stack
.text:00401048 00C call ds:lstrlenA
.text:0040104E 008 add eax, [ebp+0Ch]
.text:00401051 008 mov edx, eax
.text:00401053 008 mov ecx, 1 ;Set buffer address
.text:00401058 008 call sub_401000
.text:0040105D 008 mov [ebp-4], eax
.text:00401060 008 mov ecx, [ebp-4]
.text:00401063 008 shl ecx, 2
.text:00401066 008 mov [ebp-4], ecx
.text:00401069 008 mov edx, [ebp-4]
.text:0040106C 008 push edx
.text:0040106D 00C push offset aResultD ; "Result: %d\n"
.text:00401072 010 call ds:printf
.text:00401078 010 add esp, 8 ; clean up the stack by adding the size of the argument to esp register
.text:0040107B 008 mov eax, 539h
.text:00401080 008 mov esp, ebp
.text:00401082 004 pop ebp ;Restore old frame pointer
.text:00401083 000 retn ; Return near
.text:00401083 sub_401040 endp
私は、呼び出し規約を定義するために、誰が呼び出し元で誰が呼び出し先であるかを把握する必要があることを読みました:)私はロジックを理解するのに多くの時間を費やしました: is call ds:lstrlenA は呼び出し先ですか? sub_401040 は発信者ですか? また、1 つのプログラムに複数の呼び出し規則を含めることはできますか? cdecl と stdcall が好きですか? 私はプログラマーではありませんし、コードを書いているわけでもありません。これがウイルスの分析にどのように役立つかを理解したいだけです。