在Ubuntu中使用FASM创建可移植的可执行文件

时间:2018-03-20 06:35:15

标签: assembly x86 wine fasm

Stack Community!

我目前正在使用Ubuntu 17.10和汇编语言学习者。当我在Windows上时,我使用名为'win32a.inc'“MyLib.inc”的库来 read_eax print_hex 即可。语法过去是这样的:

import { FlashMessagesService } from 'angular2-flash-messages';
import { ConfigurationService } from 'app/+configuration/configuration.service';
import { Component, OnInit } from '@angular/core';

declare var $: any;

@Component({
  selector: 'tax-list',
  templateUrl: './tax-list.component.html'
})
export class TaxListComponent implements OnInit {

  tableData: any;

  constructor(private _config: ConfigurationService, private _flash: FlashMessagesService) { }

  ngOnInit() {
    this.fetchTableData();
    this.buttonEvents();
  }

  fetchTableData() {    
    this.tableData = {
      ajax: (data, callback, settings) => {
        this._config.getTaxRules().subscribe(data => {
          if (data.success) {
            callback({
              aaData: data.data
            });
          } else {
            alert(data.msg);
          }
        },
          error => {
            alert('Internal server error..check database connection.');
          });

      },
      serverSIde:true,
      columns: [
        {
          render: function (data, type, row, meta) {
            return meta.row + 1;
          }
        },
        { data: 'tax_title' },
        { data: 'tax_rate' },
        { data: 'status' },
        {
          render: function (data, type, row) {
            return `<button type="button" class="btn btn-warning btn-xs edit" data-element-id="${row._id}">
              <i class="fa fa-pencil-square-o"></i> Edit</button>
              <button type="button" class="btn btn-danger btn-xs delete" data-element-id="${row._id}">
              <i class="fa fa-pencil-square-o"></i> Delete</button>`;
          }
        }
      ],
      buttons: [
        'copy', 'pdf', 'print'
      ]
    };

  }

  buttonEvents(){
    document.querySelector('body').addEventListener('click', (event) => {
      let target = <Element>event.target; // Cast EventTarget into an Element
      if (target.tagName.toLowerCase() === 'button' && $(target).hasClass('edit')) {
        this.tax_edit(target.getAttribute('data-element-id'));
      }
      if (target.tagName.toLowerCase() === 'button' && $(target).hasClass('delete')) {
        this.tax_delete(target.getAttribute('data-element-id'));
      }
    });
  }

  tax_edit(tax_id) {

  }

  tax_delete(tax_id) {

    this._config.deleteTaxById(tax_id).subscribe(data => {
      if (data.success) {
        this._flash.show(data.msg, { cssClass: 'alert alert-info fade in', timeout: 3000 });
        this.fetchTableData();
      } else {
        this._flash.show(data.msg, { cssClass: 'alert alert-warning fade in', timeout: 3000 });
      }
    },
      error => {
        this._flash.show(error, { cssClass: 'alert alert-warning fade in', timeout: 3000 });
      });
  }

  reloadTable(){    
    this.ngOnInit();    
  }

}

但是在Windows上没有良好的体验,让我转向Linux。我这样做是为了安装fasm:

format PE console
include 'win32a.inc'
entry start
section '.text' code readable executable
start:
     mov eax,0xffff
     call print_eax
push 0
call [ExitProcess]

include 'MyLib.inc'

但是当我尝试制作一个可执行文件时(我计划用葡萄酒运行)我在终端上收到错误:'win32a.inc'源文件丢失。

'win32a.inc'是Windows上的默认fasm库。我不知道如何在Linux中使用它。我有所有Windows库的备份; _;

  

有没有办法可以使用FASM在Linux中制作可移植的可执行文件?

1 个答案:

答案 0 :(得分:1)

您可以在任何操作系统上编译为FASM支持的任何类型的文件。

诀窍是FASM的Windows端口将文件名视为不区分大小写,但Linux FASM将它们视为区分大小写。

因此,请检查include指令中使用的文件名的大小写。

FASM默认包含库的实际文件名 all UPPERCASE 。因此,如果要使用Linux(或任何其他Unix类型操作系统)FASM编译此代码,则需要使用WIN32A.INC