zoukankan      html  css  js  c++  java
  • linux下使用汇编语言编写hello world!程序

    最近公司需要完成安全方面的测试,随之带来需要更深入地学习攻击方法和漏洞分析的技术,总感觉有点像黑客:),不过不能只知道一些安全测试工具的方法和工具的使用,更需要基础功夫,首先从大学学过的汇编语言(呵呵,大学学过的课程,长时间没有使用大部分还给老师了)开始。

    1、下载nasm安装包

    #wget http://www.nasm.us/pub/nasm/releasebuilds/2.11.08/nasm-2.11.08.tar.gz

    2、解压安装nasm

    #tar -xzvf nasm-2.11.08.tar.gz

    #cd nasm-2.11.08

    #./configure

    #make

    #make install

    3、编写hello.asm

    section .data                           ;section declaration
    msg     db      "Hello, world!",0xA     ;our dear string
    len     equ     $ - msg                 ;length of our dear string
    section .text                           ;section declaration
                           ;we must export the entry point to the ELF linker or
       global _start       ;loader. They conventionally recognize _start as their
                           ;entry point. Use ld -e foo to override the default.
    _start:
    ;write our string to stdout
           mov     eax,4   ;system call number (sys_write)
           mov     ebx,1   ;first argument: file handle (stdout)
           mov     ecx,msg ;second argument: pointer to message to write
           mov     edx,len ;third argument: message length
           int     0x80    ;call kernel
    ;and exit
           mov     eax,1   ;system call number (sys_exit)
           xor     ebx,ebx ;first syscall argument: exit code
           int     0x80    ;call kernel 

    4、编译连接

    #nasm -f elf64 hello.asm (linux是64位的,如果是32,请使用elf32)

    #ld -s -o hello hello.o

    #ls hello

    hello

    5、执行程序

    #./hello

    Hello, world!

    终于写一个最简单的Hello World,回想起一些常用的指令和寄存器的作用,只能在后来安全测试和C语言转汇编的时候,加强一下汇编的知识,知识到用时方恨少,还是多准备一些知识了:)加油~~~~

  • 相关阅读:
    [LeetCode]Linked List Cycle
    ACM 整数划分(四)
    ACM 子串和
    ACM 阶乘之和
    ACM 组合数
    ACM 阶乘的0
    ACM 比大小
    ACM 擅长排列的小明
    ACM 重建二叉树
    cocos2dx 魔塔项目总结(一)
  • 原文地址:https://www.cnblogs.com/jinyz/p/4456270.html
Copyright © 2011-2022 走看看