1 ; test source file for assembling to ELF 2 ; copied from cofftest.asm; s/_//g s/coff/elf/g 3 ; build with (under Linux, for example): 4 ; yasm -f elf elftest.asm 5 ; gcc -o elftest elftest.c elftest.o 6 7 ; This file should test the following: 8 ; [1] Define and export a global text-section symbol 9 ; [2] Define and export a global data-section symbol 10 ; [3] Define and export a global BSS-section symbol 11 ; [4] Define a non-global text-section symbol 12 ; [5] Define a non-global data-section symbol 13 ; [6] Define a non-global BSS-section symbol 14 ; [7] Define a COMMON symbol 15 ; [8] Define a NASM local label 16 ; [9] Reference a NASM local label 17 ; [10] Import an external symbol 18 ; [11] Make a PC-relative call to an external symbol 19 ; [12] Reference a text-section symbol in the text section 20 ; [13] Reference a data-section symbol in the text section 21 ; [14] Reference a BSS-section symbol in the text section 22 ; [15] Reference a text-section symbol in the data section 23 ; [16] Reference a data-section symbol in the data section 24 ; [17] Reference a BSS-section symbol in the data section 25 26 [BITS 32] 27 [GLOBAL lrotate] ; [1] 28 [GLOBAL greet] ; [1] 29 [GLOBAL asmstr] ; [2] 30 [GLOBAL textptr] ; [2] 31 [GLOBAL selfptr] ; [2] 32 [GLOBAL integer] ; [3] 33 [EXTERN printf] ; [10] 34 [COMMON commvar 4] ; [7] 35 36 [SECTION .text] 37 38 ; prototype: long lrotate(long x, int num); 39 lrotate: ; [1] 40 push ebp 41 mov ebp,esp 42 mov eax,[ebp+8] 43 mov ecx,[ebp+12] 44 .label rol eax,1 ; [4] [8] 45 loop .label ; [9] [12] 46 mov esp,ebp 47 pop ebp 48 ret 49 50 ; prototype: void greet(void); 51 greet mov eax,[integer] ; [14] 52 inc eax 53 mov [localint],eax ; [14] 54 push dword [commvar] 55 mov eax,[localptr] ; [13] 56 push dword [eax] 57 push dword [integer] ; [1] [14] 58 push dword printfstr ; [13] 59 call printf ; [11] 60 add esp,16 61 ret 62 63 [SECTION .data] 64 65 ; a string 66 asmstr db 'hello, world', 0 ; [2] 67 68 ; a string for Printf 69 printfstr db "integer==%d, localint==%d, commvar=%d" 70 db 10, 0 71 72 ; some pointers 73 localptr dd localint ; [5] [17] 74 textptr dd greet ; [15] 75 selfptr dd selfptr ; [16] 76 77 [SECTION .bss] 78 79 ; an integer 80 integer resd 1 ; [3] 81 82 ; a local integer 83 localint resd 1 ; [6] 84