| ;; rdtmain - main part of test program for RDX execution. |
| ;; returns true (0) if its parameter equals the phrase "hello" |
| ;; "hello" is stored in the library part, to complicate the |
| ;; linkage. |
| |
| ;; assemble and link with the following commands: |
| ;; nasm -f rdf rdtmain.asm |
| ;; nasm -f rdf rdtlib.asm |
| ;; ldrdf rdtmain.rdf rdtlib.rdf -o rdxtest.rdx |
| |
| ;; run with 'rdx rdxtest.rdx [parameters]' on a Linux (or possibly |
| ;; other 32 bit OS) systems (x86 architectures only!) |
| ;; try using '&& echo Yes' afterwards to find out when it returns 0. |
| |
| [EXTERN _strcmp] ; strcmp is an imported function |
| [EXTERN _message] ; imported data |
| [SECTION .text] |
| [BITS 32] |
| |
| ;; main(int argc,char **argv) |
| [GLOBAL _main] |
| _main: |
| push ebp |
| mov ebp,esp |
| |
| ;; ebp+8 = argc, ebp+12 = argv |
| |
| cmp dword [ebp+8],2 |
| jb error ; cause error if < 1 parameters |
| |
| mov eax, [ebp+12] ; eax = argv |
| |
| mov ebx, [eax+4] ; ebx = argv[1] |
| mov ecx, _message ; ecx = "hello" |
| |
| push ecx |
| push ebx |
| call _strcmp ; compare strings |
| add esp,8 ; caller clears stack |
| |
| pop ebp |
| ret ; return return value of _strcmp |
| |
| error: |
| mov eax,2 ; return 2 on error |
| pop ebp |
| ret |