Пробую написать функцию суммирования двух целых чисел, которая бы работала под Windows и под Linux (Yasm):
BITS 64
SECTION .text
global L3
L3:
MOV EBP,ESP
MOV EAX,[EBP+4]
MOV ECX,[EBP+8]
ADD EAX,ECX
RET
#include <stdint.h>
#include <stdio.h>
extern __attribute__((stdcall,noinline)) uint32_t L3(uint32_t a, uint32_t b);
int main() {
uint32_t c = L3(2,2);
printf("2+2=%d\n",c);
return 0;
}
@C:\TDM-GCC-64\bin\gcc.exe -c -o test.obj test.c
@D:\UTILS\yasm.exe -f coff -m amd64 -o addon.obj addon.asm
@C:\TDM-GCC-64\bin\gcc.exe test.obj addon.obj -o test.exe
Однако, при попытке запуска выдается:
2+2=1
Ссылки по теме
1) http://stackoverflow.com/questions/5612492/how-to-link-elf32-assembly-and-c-f...
2) http://habrahabr.ru/sandbox/26864/