Количество выполненных Инструкций отличается для программы Hello World Nasm Assembly и C

У меня есть простой отладчик (с помощью ptrace:http://pastebin.com/D0um3bUi) подсчитать количество инструкций, выполненных для заданной входной исполняемой программы. Для подсчета команд используется одноступенчатый режим выполнения ptrace.

Для этого, когда исполняемый файл программы 1) (a.out из gcc main.c) указан в качестве входных данных для моего тестового отладчика, он печатает около 100 тыс. В виде выполненных инструкций. Когда я использую-static Опция дает 10681 инструкцию.

Теперь в 2) я создаю программу сборки и использую NASM для компиляции и компоновки, а затем, когда этот исполняемый файл задан в качестве входных данных для отладчиков теста, он показывает 8 команд в качестве числа и является подходящим.

Количество инструкций, выполненных в программе 1), велико из-за связи программы с системной библиотекой во время выполнения? используется -static и который уменьшает счет в 1/10. Как я могу убедиться, что счетчик команд соответствует только основной функции в Программе 1) и как Программа 2) сообщает отладчику?

1)

#include <stdio.h>

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

Я использую gcc для создания исполняемого файла.

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

Ответы на вопрос(2)

Ваш ответ на вопрос