Halaman

Kamis, 29 Oktober 2020

CATATAN C/C++

ASSEMBLY C/C++

BASIC ASM

Basic Asm bisa berada diluar fungsi.

Format basic assembly GNU GCC :

asm asm-qualifiers( AssemblerInstructions)

asm-qualifiers bisa :

    volatile. Ini optional. Semua basic asm sudah secara implicit volatile. Volatile maksudnya manipulasi input untuk mengubah output.

    inline. Ini dioptimalkan untuk menghasilkan ukuran statement asm sekecil mungkin.

untuk satu baris :


void main()
{
    __asm__("movl %ecx %eax");
}

kalau banyak baris tambahkan \n\t di akhir baris. Hal ini karena gcc mengirim tiap instruksi sebagai sebuah string ke GNU assembler (GAS). Dengan menggunakan newline/tab kita mengirim format yang sesuai untuk assembler. 
Contoh (bisa pakai __asm__ atau asm saja) :

void main()
{
    __asm__("movl %ecx %eax \n\t"
                       "movl %eax %ebx \n\t"
             "movl %ebx %edx"
                        );
}


EXTENDED ASSEMBLY - DENGAN C EXPRESSION OPERANDS

Extended Asm harus berada dalam fungsi.

Format extended assembly GNU GCC :

asm asm-qualifiers( AssemblerTemplate
    : OutputOperands
    : Input Operands
    : Clobbers);

asm asm-qualifiers( AssemblerTemplate
    : 
    : Input Operands
    : Clobbers
    : GotoLabels);

asm-qualifiers bisa volatile, inline atau goto.

    volatile. Volatile maksudnya manipulsi input untuk mengubah output.

    inline. Ini dioptimalkan untuk menghasilkan ukuran statement asm sekecil mungkin.

    goto. Ini menginformasikan pada compiler bahwa statement asm mungkin akan melakukan jump ke label yang ada di daftar GotoLabels.

contoh copy src ke dst + 1

int src = 1;
int dst;

asm("mov %1, %0\n\t"
    "add $1, %0"
    : "=r" (dst)
    : "r" (src));

printf("%d\n", dst);






CATATAN GDB DEBUGGER

 1. Load program :
        gdb nama-program
2. Set breakpoint :
        break main
        lihat breakpoint : info breakpoint
3. Set disassembly sintaks :
        set disassembly-flavor intel (atau att defaultnya)
4. Tampilkan disassemble instruksi berikutnya :
        set disassemble-next-line on /off
        single step disassembly : nexti dan stepi untuk masuk dalam fungsi
5. Tampilkan variable :
        print nama_variable atau
        display nama_variable
6. Set watchpoint :
        write : watch nama-variable
        read : rwatch nama-variable
        tampilkan watchpoint : info breakpoint
        disable watchpoint : disable nomor-watchpoint
7. Tampilkan memory :
        x/nfu
        n : jumlah data
        f : format ( x = hexadecimal/default, i = mnemonic, lainnya d’, ‘u’, ‘o’, ‘t’, ‘a’, ‘c’, ‘f’, ‘s’)
        u : unit (b = byte, h = half word/2byte, w = word/4byte/default, g = giant word/ 8byte )
        contoh : x/10xw $esp (tampilkan 10 data word format hexadecimal dimulai alamat esp.

Dasar

TUTORIAL 1 : DASAR BAHASA ASSEMBLY WINDOWS 32bit MASM32 CONSOLE UNTUK PEMULA

Alhamdulillahirabbilalamin, pada saat ini kita semua masih diberi kesempatan untuk terus belajar, kita niatkan mudah-mudahan apa yang kita l...

Postingan Populer