Anzahl der ausgeführten Anweisungen für das Hello World-Programm Nasm Assembly und C

Ich habe einen einfachen Debugger (mit ptrace:http: //pastebin.com/D0um3bU), um die Anzahl der Anweisungen zu zählen, die für ein bestimmtes ausführbares Eingabeprogramm ausgeführt wurden. Es verwendet den Einzelschritt-Ausführungsmodus ptrace, um Anweisungen zu zählen.

Wenn die ausführbare Datei von Programm 1 (a.out from gcc main.c) als Eingabe für meinen Test-Debugger angegeben wird, werden ungefähr 100 KB als ausgeführte Anweisungen ausgegeben. Wenn ich @ benut-static Option gibt es 10681 Anweisungen.

Nun in 2) Ich erstelle ein Assembler-Programm und verwende NASM zum Kompilieren und Verknüpfen. Wenn diese ausführbare Datei als Test-Debugger-Eingabe angegeben wird, werden 8 Anweisungen als Anzahl angezeig

Die Anzahl der in Programm 1) ausgeführten Anweisungen ist hoch, da das Programm zur Laufzeit mit Systembibliotheken verknüpft wird. verwendet -static und reduziert die Anzahl um einen Faktor von 1/10. Wie kann ich sicherstellen, dass die Anweisungsanzahl nur die der Hauptfunktion in Programm 1) ist und wie meldet sich Programm 2) für den Debugger?

1)

#include <stdio.h>

int main()
{
    printf("Hello, world!\n");
    return 0;
}    

Ich benutze gcc, um die ausführbare Datei zu erstellen.

2)

; 64-bit "Hello World!" in Linux NASM

global _start            ; global entry point export for ld

section .text
_start:

    ; sys_write(stdout, message, length)

    mov    rax, 1        ; sys_write
    mov    rdi, 1        ; stdout
    mov    rsi, message    ; message address
    mov    rdx, length    ; message string length
    syscall

    ; sys_exit(return_code)

    mov    rax, 60        ; sys_exit
    mov    rdi, 0        ; return 0 (success)
    syscall

section .data
    message: db 'Hello, world!',0x0A    ; message and newline
    length:    equ    $-message        ; NASM definition pseudo-                             

nasm -f elf64 -o main.o -s main.asm
ld -o main main.o

Antworten auf die Frage(4)

Ihre Antwort auf die Frage