タグ

asmに関するsh19910711のブックマーク (13)

  • Rustによる言語内x86_64アセンブラのAPIデザインと実装

    概要 Rustでx86_64アセンブラを実装しました。JITコンパイラの実装での利用を想定しているため、アセンブリコードを文字列として入力に取るのではなく、 静的に型付けされたRustプログラム上にアセンブリコードを記述できるライブラリ として実装しています。例えばフィボナッチ数を計算するアセンブリコードを以下のように記述し、付属のJITエンジンを用いて実行できます: fn fib_object() -> io::Result<Object> { let mut w = Writer::new(); let fib = w.get_label("fib"); let l1 = w.issue_label(); let l2 = w.issue_label(); w.define(fib, true); w.cmpl(Edi, 1i8)?; w.jle(Short(l2))?; w.movl

    Rustによる言語内x86_64アセンブラのAPIデザインと実装
    sh19910711
    sh19910711 2024/09/14
    "アセンブリコードを文字列として入力に取るのではなく、 静的に型付けされたRustプログラム上にアセンブリコードを記述" '22
  • LLVMインラインアセンブラのmemory constraints/clobberのはなし - Qiita

    Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article?

    LLVMインラインアセンブラのmemory constraints/clobberのはなし - Qiita
    sh19910711
    sh19910711 2024/06/18
    "LLVMインラインアセンブラはC言語とは文法が違う / memory clobber: compiler fenceとかよばれてる + コンパイラがコードを並べ替えしないように + CPUの命令reorderingは防げないので注意" 2023
  • ARM命令はなぜ先頭に0xEが並ぶのかについて調べてみた - /home/tnishinaga/TechMEMO

    目grep入門 +解説 from murachue www.slideshare.net こちらのスライドでご存知の方も多いと思いますが、ARMの実行バイナリをバイナリエディタのビットマップビューで見るとゴマ粒のようなものが縦に並んでいるのが見えます。 これはほとんどの命令の先頭4bitが0xEになるというARM命令の特徴によるものであり、CTFなどでそのバイナリがどのアーキテクチャ向けのものかを特定する手がかりになります。 ここまでは私も知っていたのですが、ではなぜ命令の頭が0xEになるかまでは調べたことが無かったので、調べてみました。 条件実行 先頭が0xEとなる理由を探るため、ARM7の資料を参照してARM命令のフォーマットを確認してみます。 ARM Information Center この資料より、ARM命令のフォーマットは大まかに以下のような構成になっていることがわかります。

    ARM命令はなぜ先頭に0xEが並ぶのかについて調べてみた - /home/tnishinaga/TechMEMO
    sh19910711
    sh19910711 2024/05/30
    "ARMの実行バイナリをバイナリエディタのビットマップビューで見るとゴマ粒のようなものが縦に並んでいる / 多くの命令の先頭が0xEなのは、コンディションフィールドの値がAL(0xE)だから" 2017
  • アセンブリ言語でフィボナッチ数 - sileのブログ

    前回は、C++で単純なVMを書いて、その上でのフィボナッチ数の計算時間を測定した。 そのVM部分をネイティブコードに置き換えたら、どの程度処理速度が改善するのかを測ってみたかったので、その前にまずネイティブコード(x86)の勉強も兼ねて、common lispでアセンブラを書くことにした。 現状はまだまだ未完成で、以下のような制限があるが、一応フィボナッチ数が計算できるくらいまでには出来たので、その計算時間を参考までに残しておく。 制限: 使用可能な命令は mov/ret/push/pop/add/sub/inc/dec/cmp/jmp/jcc/call のみ 64bitのみ対応 エラーチェックとか不十分 SBCLのみで動作 github: cl-asm-0.0.1 コード フィボナッチ数計算用のコード。 (use-package :sb-alien) ;; Fibonacci用のアセンブ

    アセンブリ言語でフィボナッチ数 - sileのブログ
  • An ASM Monad

    Two weeks ago, I briefly introduced a way of representing Assembly Language in Haskell code, in order to illustrate the programming paradigm to which it belongs. In a move that is sure to scare off both high-level and low-level programmers, I shall now explain how a Monad implementing 6502 Assembly can be created. In real code, this would use more abstract or efficient types, but in this article I

  • TALK project

  • x86 Linux シェルコード作成 - k0u5uk3’s blog

    2015-07-21 x86 Linux シェルコード作成 pwn シェルコードとは ソフトウェアの脆弱性攻撃のペイロードであり、バイトコードで記述されます。そのため、CPUやOSのバージョンといったプラットフォーム毎に作成されます。 シェルコードという名称は一般的にシェルを起動することが攻撃者にとって楽にマシン全体の制御を奪う方法であり多用されているからですが、実際のところシェルコードはどのような処理も記述することができます。 x86 Linux シェルコード作成の前提知識 アセンブリ言語 シェルコードのバイトコードは、マシン語命令のアーキテクチャによって異なるため、アセンブリ言語で記述することになります。 Linuxシステムコール OSはカーネル内で入力、出力、プロセス制御、ファイルアセクス、ネットワーク通信と行ったタスクを管理します。 C言語のプログラムは最終的に、こういったタスクを

    x86 Linux シェルコード作成 - k0u5uk3’s blog
  • 終了いたしました。

    作者ホームページサービス(hp.vector)は終了いたしました。 長らくのご利用、ありがとうございます。 ご不明な点があれば、お問い合わせページをご覧の上、お問い合わせください。 ※15秒後にトップページに戻ります。 (c) Vector HOLDINGS Inc.All Rights Reserved.

  • インラインアセンブラで学ぶアセンブリ言語 第3回

    はじめに これまで、『インラインアセンブラで学ぶアセンブリ言語』の第1回と第2回を通じて、Microsoft Visual C++のインラインアセンブラを用い、アセンブリ言語の基について説明してきました。 第3回となる稿では、インラインアセンブラを用いた流れ制御を解説します。アセンブリ言語は高水準言語における文の概念がなく、すべての命令が単純なオペコードと引数(オペランド)だけで構成されています。この純粋な構造のために、流れ制御を行う場合も、if文やfor文のように記述することはできません。基的にプログラムの流れ制御はすべてC言語で言うところのgoto文だけで記述し、比較命令や条件ジャンプも個別の命令で行います。 来のマクロ機能を持たない生のアセンブリ言語ならば、ジャンプ先のプログラムの位置すらも、すべてメモリアドレスで指定しなければなりません。実際に、機械語にアセンブルされた後は

    インラインアセンブラで学ぶアセンブリ言語 第3回
  • プログラミングノート - x86

    movl 3(%esi,%ebx,2), %eax 整数演算 ロード/ストア mov eax, [4] mov eax, [ebx] mov eax, [ebx+4] mov eax, [ecx*2+4] mov eax, [ebx+ecx] mov eax, [ebx+ecx+4] mov eax, [ebx+ecx*2] mov eax, [ebx+ecx*2+4] mov eax, [rip+4] レジスタ (eax, ebx, ecx の部分) は汎用レジスタどれでも指定できる。 シフト (*2 の部分) は 2, 4, 8 のいずれか。 オフセット (+4 の部分) は符号付き 8 ビットまたは 32 ビット。 64 ビットでは rip 相対アドレッシングが可能。 ただし単純にオフセット (符号付き 32 ビット) を加算する形式のみ。 32 ビットでは eip 相対は不可。 c

  • 8086アセンブラ資料室

    8086アセンブラ資料室 このページについて このページは、PC-9801上のMS-DOSで動作するマクロアセンブラ(MASM)の文法に基づいて書いています。他のアセンブリ言語とは文法の違いがある可能性があります。 このページは過去に8086アセンブラで作られたプログラムの解析や新システムへの移行のための資料として掲載していますが、ここに書いてあることを100%信用したりはせず、少しでもおかしいと思ったものは、各自で他の資料をあたるなり、検証するなりしながら、あくまでもヒントとしてご利用ください。 皆様のご理解とご協力をお願いします。 「アセンブラ」と「コンパイラ」 アセンブラ言語とコンパイラ言語は、一見同じようなものに見えます。実際に、『プログラムを作る』という目的は同じです。しかし、中身はまったく違います。コンパイラは、その文法を解釈し機械語コードを生成するのに対し、アセンブラは単

  • WLA DX - Yet Another GB-Z80/Z80/Z80N/6502/65C02/65CE02/65816/68000/6800/6801/6809/8008/8080/HuC6280/SPC-700/SuperFX Multi Platform Cross Assembler Package

    WLA DX - Yet Another GB-Z80/Z80/Z80N/6502/65C02/65CE02/65816/68000/6800/6801/6809/8008/8080/HUC6280/SPC-700/SuperFX Multi Platform Cross Assembler Package Originally written by Ville Helin in 1998-2008 Features: Fast SNES support SMS/GG support Gameboy support Megadrive support PC-Engine support Support for object and library files You can patch ROM images with code Multilevel macros (actually, fu

  • Technical Assembler

    このページでは、アセンブリ言語及び、インライン・アセンブラによる他の言語との連携等の技術的情報交換、質疑応答を行う事を目的として作成されています。 このページへのリンクはフリーです。 リンクをしていただいた方は事後でもかまいませんのでメールなどいただけると幸いです。 ご希望があればこちらからもリンクさせていただきたいと思います。 ・ How to Assembler Assembler とはなんぞや? ・ Assembler Sample source サンプルソースです。 ・ Mnemonic reference ニーモニックのリファレンスです。 ・ Assembler Message board Assembler 関連の話題をどうぞ。 ・ Assembler Chat room Assembler のチャットです。 ・ Assembler FAQs Assembler 関連の FAQ

  • 1