tinyhelloworld for arm

《程序员的自我修养-链接,装载与库》
TinyHelloWorld.c


char* str = "Hello World!\n";  

void print()  
{  
    asm("movl $13,%%edx \n\t"  
        "movl %0,%%ecx \n\t"  
        "movl $0,%%ebx\n\t"  
        "movl $4,%%eax \n\t"  
        "int $0x80  \n\t"  
        ::"r"(str):"edx","ecx","ebx");  
}  

void exit()  
{  
    asm("movl $42,%ebx \n\t"  
    "movl $1,%eax \n\t"  
    "int $0x80  \n\t"  
    );  
}  

void nomain()  
{  
    print();  
    exit();  
}
gcc -c -fno-builtin -m32 tinyhelloworld.c 
ld -static -e nomain -o tinyhelloworld tinyhelloworld.o -melf_i386

arm32


char *str = "Hello World!\n";  

//ssize_t write(int fd, const void *buf, size_t count);

void print()  
{  
    asm("mov    r2, #13 \n\t"  
        "mov    r1, %0 \n\t"  
        "mov    r0, #1 \n\t"  
        "mov    r7, #4 \n\t"  
        "svc    0x0 \n\t"  
        ::"r"(str):);  
}  

void exit()  
{  
    asm("mov    r0, #0 \n\t"  
        "mov    r7, #1 \n\t"  
        "svc    0x0  \n\t"  
    );  
}  

void nomain()
{  
    print();
    exit();
}

Makefile如下


.PHONY : all clean

CC = arm-none-linux-gnueabi-gcc
LD = arm-none-linux-gnueabi-ld
DUMP = arm-none-linux-gnueabi-objdump

CFLAGS = -nostdlib -fno-builtin
LFLAGS = -static -e nomain

tinyhelloworld: tinyhelloworld.c
    $(CC) -c $(CFLAGS) $^
    $(LD) $(LFLAGS) $@.o -o $@
    $(DUMP) -d $@ > $@.dis

clean:
    rm -rf tinyhelloworld.o tinyhelloworld tinyhelloworld.dis

这里写图片描述

arm64


char *str = "Hello World!\n";  

//ssize_t write(int fd, const void *buf, size_t count);

void print()  
{  
    asm("mov    x2, #13 \n\t"  
        "mov    x1, %0 \n\t"  
            "mov    x0, #1 \n\t"  
            "mov    x8, #64 \n\t"  
            "svc    0x0 \n\t"  
            ::"r"(str):);  
}

void exit()  
{  
    asm("mov    x0, #0 \n\t"  
        "mov    x8, #93 \n\t"  
        "svc    0x0  \n\t"  
    );  
}

void nomain()
{  
    print();
    exit();
}

Makefile如下


.PHONY : all clean

CC = aarch64-linux-android-gcc
LD = aarch64-linux-android-ld
DUMP = aarch64-linux-android-objdump

CFLAGS = -nostdlib -fno-builtin
LFLAGS = -static -e nomain

tinyhelloworld: tinyhelloworld.c
    $(CC) -c $(CFLAGS) $^
    $(LD) $(LFLAGS) $@.o -o $@
    $(DUMP) -d $@ > $@.dis
    cp $@ $@_64

clean:
    rm -rf tinyhelloworld.o tinyhelloworld tinyhelloworld.dis

这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值