2021-01-01から1年間の記事一覧
はじめに 3gxtoolという、3ds向けのプラグインを作成するツールがあります。通常はCTRPFと呼ばれるフレームワークを用いて作成しますが、今回はCTRPFを使わずに0からプラグインを作成してみます。 コード とりあえず最小のプログラムを作成してみましょう。s…
はじめに ある程度長い間プロジェクトを作ったり貢献したりしていると、ローカルリポジトリがごちゃごちゃしてくる。そんなとき、ふとインターネット記事で見つけたghq+pecoの組み合わせがかなり使いやすかったので、備忘録的な感じで残しておこうと思う。 …
ビジュアルプログラミングとは 皆さんは「ビジュアルプログラミング」と呼ばれるものを聞いたことがありますか?プログラミングと聞くと、テキストでコードを記述する様子を想像するかもしれませんが、ビジュアルプログラミングはそうではありません。 ビジ…
ライセンスの種類 OSSライセンスは以下の3つに分類されます。 コピーレフト型 準コピーレフト型 非コピーレフト型 それぞれ以下のような違いがあります。 分類 改変部分の公開義務 改変部分以外の公開義務 コピーレフト型 有り 有り 準コピーレフト型 有り …
はじめに Raspbianに入っているツール、デフォルトだと結構バージョンの低いものが多いです。「新しいバージョンが使いたい!」というときに、RaspbianにもPPAを追加できたら便利ですよね。今回はRaspbianにPPAを追加する方法を紹介します。 手順 今回は例と…
今回はコアダンプを用いたGDBでのデバッグ方法を解説します。 そもそもコアダンプとは Wikipediaでは以下のように説明されています。 コアダンプは、ある時点の使用中のメモリの内容をそのまま記録したものであり、一般に異常終了したプログラムのデバッグに…
AArch64とは Armアーキテクチャの64bit拡張。ARMv8-Aアーキテクチャより導入されている。 環境構築 いつも通り、GCCとQEMUのユーザーモードエミュレーションを使用する。 $ sudo apt install gcc-aarch64-linux-gnu qemu-user コード コメントアウトする時は…
はじめに 今回はRustでArmバイナリをビルドする手順について紹介します。記事を作成するにあたり、以下の記事を参考にさせていただきました。 ラズパイに向けてRustをクロスコンパイル! 実行環境 Ubuntu 20.04 LTS (WSL2) 1. 新しいプロジェクトの作成 今回…
RISC-Vとは 以下、Wikipediaより引用(Wikipediaのライセンスに基づく)。 RISC-V(リスク ファイブ)は、確立された縮小命令セットコンピュータ (RISC) の原則に基づいたオープン標準の命令セットアーキテクチャ (ISA) である。他の多くのISA設計とは異なり…
はじめに Armには、浮動小数点数を扱うためのVFPと呼ばれる機構が用意されている。今回はこれを用いて、浮動小数点数の表示をしてみよう。 C言語 今回例として作成する処理は、C言語で書くと以下のようになる。円周率3.14を表示するというものだ。 #include <stdio.h></stdio.h>…
手順 WSLとWindows TerminalをMicrosoft Storeからインストール(Windows Terminalは必須ではないが、操作性に優れているため推奨)。各種設定は以下を参考に。 Windows Subsystem for Linux (WSL1) をインストールしてみよう! Windowsで至高のターミナル生…
概要 きっかけはどぅーむーんさんのツイート。 全レジスタ確認の考えまくったところ、可能性は低いがある。それも構成自体は超簡単に作れそうと考えれるから後は実現だけ。— どぅーむーん (@domoon_mutex) 2021年3月14日 内容としては、hookコードでレジスタ…
Armにはnopという「何もしない命令」が存在する。これは主に以下のような用途で使用される。 遅延処理 別の命令のダミー 命令のパディング 上記はあくまで一例であり、他にも用途は様々。 こんなnopだが、すべてのバージョンで同じようにnopを扱えるわけでは…
はじめに CTRPFと呼ばれるNintendo 3DS向けのプラグインシステムがある。今回はこれを用いて、ソートアルゴリズムについて学ぶ。 ソートアルゴリズム データの集合を一定の規則に従って並べることを「ソート」と言う。このソートを行う手順や計算手法のこと…
はじめに 皆さんはArm命令の末尾にsがついた命令を見たことがあるだろうか。見たことはあっても、通常の命令と何が違うのかイマイチ分からない、という方も多いかもしれない。今回はこのsがどのような意味を持つのか詳しく見てみよう。 sの意味 末尾にsを付…
はじめに ArmをはじめとするRISCプロセッサは固定長命令であるため、32bitの即値をそのまま使用することはできない。Armの命令では、下位8bitが即値に割り当てられることが多い。 「それだと8bitサイズの即値しか使えないじゃないか!!」そう思った方がいる…
Microsoft x64 引数 型 第1 第2 第3 第4 整数・ポインタ RCX RDX R8 R9 浮動小数点 XMM0 XMM1 XMM2 XMM3 レジスタだけでは引数が不足する場合、スタックを使用する。 戻り値 整数型・ポインタ型はRAXを、浮動小数点型はXMM0を使用して返される。 System …
はじめに リポジトリをフォークした後、フォーク元のリポジトリが更新された場合に同期する方法を紹介。 方法 ①フォーク元のリポジトリをupstreamという名前で追加する。 git remote add upstream (元のリポジトリのURL) ②フォーク元のリポジトリが追加され…
はじめに Thumb命令とは、ARMプロセッサに組み込まれている16bit長の命令である。命令に制限はあるものの、ARM命令の半分の長さで実行できるため、ARM命令と組み合わせることで効率のよいコードを作成することができる。 Thumb関数の書き方 .thumb .thumb_fu…
はじめに アセンブラがまだ発達していなかった頃、人間は機械語への翻訳をすべて手作業で行っていた。今となってはアセンブラやツールがかなり発達しているため、簡単に機械語に翻訳できる。とはいえ、アセンブリの命令と機械語がどのように対応しているかを…
はじめに ショートコーディングとは、ソースコードをいかに短くできるかというものである。今回はARMアセンブリにおいて、どのようにすればコードを短くできるか、色々と考えてみる。 条件実行の短縮 mov r0, #0 @ r0 = 0 cmp r0, #0 @ if(r0 == 0) beq <label> @ g</label>…