ardump.c リンカ・ローダ実践開発テクニック 坂井弘亮(1) coding(89) https://qiita.com/kaizen_nagoya/items/2a7bf3050ee6ac662272
linker, locator and loader with ChatGPT
https://qiita.com/kaizen_nagoya/items/564616f8aa87570de3ae
ChatGPT
ardump.c リンカ・ローダ実践開発テクニック 坂井弘亮(1) coding(89) https://qiita.com/kaizen_nagoya/items/2a7bf3050ee6ac662272 を補足お願い。
ChatGPT:
以下、**「ardump.c — 『リンカ・ローダ実践開発テクニック』坂井弘亮 (編第1回)」**の記事内容を踏まえつつ、補足/解説・考察を交えて整理します。もし特定の部分(ソースコード、ELF/ar 形式、実装意図など)について深く知りたいなら、そちらも補足できますので教えてください。
元記事のおさらい(概要)
Qiita記事「ardump.c リンカ・ローダ実践開発テクニック 坂井弘亮(1)」では、書籍『リンカ・ローダ実践開発テクニック』で扱われている 簡易的なアーカイブ/実行形式ファイルのダンプ表示ツール(ardump.c) のソースを紹介し、そのソースを読み解きながら、
ELF ヘッダ/セクション/シンボル/リロケーション情報の解析
ar 形式アーカイブファイル(static ライブラリ等)への対応
mmap やファイルマップ、ヘッダ構造体の扱い
コード構造や主な流れ
などを整理しています。
Qiita
この記事では、ardump.c のソースコード全文および箇所ごとの解説が掲載されており、ELF/ar の構造を理解する一助となっています。
Qiita
ただし、元記事は「書きかけ」「追記予定」としており、すべてを解説し切れていない点もあります。
Qiita
補足・解説・考察
以下、元記事で扱われている ardump.c ソースをベースに、補足しておくと役立つ観点や注意点、実装上の工夫・限界などを記します。
ソースコード構造と主要関数
ardump.c の構造をざっと追うと、主に次のようになっています(元記事コードに準拠):
elfdump(char *head)
ELF ファイル(あるいは ELF 部分)を受け取って、
- ELF ヘッダの整合性チェック(マジック数、クラス、エンディアン)
- セクションテーブルの列挙
- プログラムセグメント(プログラムヘッダ)の列挙
- シンボルテーブルを探して、シンボルの一覧表示
- リロケーションセクションを探して、対応するシンボルとリロケーション情報を出力
main(int argc, char *argv[])
入力ファイルを開き、mmap でメモリマップし、
先頭バイトが ar(アーカイブ)であればアーカイブ処理、そうでなければ ELF 処理を呼び出す。
アーカイブの場合は、struct ar_hdr を順次読み、各メンバを識別して、
- シンボルテーブル用メンバ /
- 文字列テーブル用メンバ //
- その他メンバ(通常のオブジェクトファイル部分)
に応じて、該当オブジェクト部分を elfdump() へ渡す。
ar アーカイブ処理
アーカイブヘッダ struct ar_hdr の ar_name フィールドを見て、
名前が / または // であれば特殊処理(シンボルテーブルや文字列テーブル)
そうでなければ、通常のメンバオブジェクトとして、ファイル名を取得して elfdump() 呼び出し
その他補助処理
- サイズ調整(ar ではメンバサイズが奇数の場合パディングされる)
- ファイル末尾の適切な処理
- mmap/munmap、ファイルクローズ
補足して押さえておきたい点・注意点
以下は、元記事にあまり触れられていないか、補強しておくと理解が深くなる点です。
ELF 形式・仕様周り
ELF マジックチェック(IS_ELF)
ehdr->e_ident フィールドの先頭 4 バイトが "\x7F" "E" "L" "F" であることを確認するチェック(IS_ELF)があります。
これにより、このメモリ領域が ELF 形式であるかどうかを初期に判定します。
クラス・エンディアンのチェック
32bit/64bit(EI_CLASS)やリトルエンディアン/ビッグエンディアン(EI_DATA)を規定と照合し、サポート外ならエラー出力します。
セクション名文字列テーブル(.shstrtab)
セクション名(sh_name)は、セクション名文字列テーブル .shstrtab 内のオフセットを指す値として入っており、
ehdr->e_shstrndx によって .shstrtab セクションのインデックスが示されています。
shstr = head + e_shoff + … でそのセクションヘッダを取得し、
さらに shstr->sh_offset を基に文字列部分へアクセス、セクション名を得ています。
セクションが所属するセグメント(プログラムヘッダ)表示
セクションオフセット・サイズを、各プログラムヘッダ(Elf_Phdr)が示すメモリ領域(p_offset から p_offset + p_filesz)と比較して、
セクションがそのセグメントに収まっていればセグメント中に属するものとして表示しています。
このような「セグメントに含まれるセクション名のリスト表示」が元コードに実装されています。
シンボルテーブルの探索
すべてのセクションヘッダを調べ、sh_type == SHT_SYMTAB(通常のシンボルテーブル)を探します。
見つかればそのセクションを使ってシンボルを列挙。
シンボル名は .strtab セクション(別のセクション)を使って名前文字列を取得します。
リロケーションの解析
SHT_REL / SHT_RELA タイプのセクションを探します(ELF 形式に応じて)。
各リロケーションエントリ(Elf_Rel もしくは Elf_Rela)から、
- r_info を通じて対象シンボル(ELF_R_SYM(r_info))を得たり
- %s フォーマットでリロケーション対象シンボルの名前を表示するなど
パディング処理
ar アーカイブでは、各メンバ(struct ar_hdr + メンバデータ)のサイズが奇数バイトの場合、
1 バイトパディング(アライン)される仕様があります。
実装では、if (size % 2) size++; として次のメンバへの移動オフセットを調整しています。
ar アーカイブ形式・注意点
ARMAG / SARMAG
アーカイブファイルの先頭にはマジック文字列 !\n(ARMAG)が置かれ、
アーカイブファイルかどうかの判定に使われます。
struct ar_hdr の扱い
arhdr->ar_name は通常メンバ名を含む固定長文字列ですが、
特殊な名前(/ や //)が予約されており、
これらはシンボルテーブルや文字列テーブルを持つメンバを示すため、特別処理が必要です。
名前解決(文字列テーブル利用)
通常は arhdr->ar_name に直接ファイル名が入っていますが、
もし先頭文字が '/' の場合、文字列テーブルメンバ(//)を参照してオフセットで名前を取得する実装がなされています。
「シンボルテーブル found」出力
arhdr->ar_name == "/ "(2 文字)という比較で “symbol table found.” を出力するようにしていますが、これはそのアーカイブがシンボルテーブルを含むことを示す慣習的表現です。
各オブジェクト部(.o ファイル)への対処
通常のメンバ部分では、
(char *)arhdr + sizeof(ar_hdr) というオフセットからオブジェクトファイル領域が始まり、
elfdump を呼んでその領域を ELF として解析します。
実装上の限界・改善可能性
元実装は、あくまで「簡易」な ELF/ar ダンプツールとしての説明用途を想定しており、実際の商用リンカ・ローダのような機能性は持っていない点に注意が必要です。以下、限界例と改善案を挙げておきます。
制限・未対応項目 備考・改善案
ELF の多様なバリエーション対応 例えば、ELF32 / ELF64、RELA vs REL、ビッグエンディアン系、拡張セクションヘッダテーブル(大きな e_shoff)などへの対応を強化する必要あり
動的リンク/PLT/GOT の扱い この実装では基本的なリロケーション一覧表示にとどまっており、実際に動作する再配置や動的リンク処理は対象外
セクション属性(フラグ、アラインメント、型など)表示 シンプルに名前表示のみなので、sh_flags や sh_addralign、sh_type 内容の詳細表示を付け加えるのが実用性上望ましい
シンボルのバインディング・可視性 ELF_ST_BIND, ELF_ST_VISIBILITY 等を併記して表示すると、リンカ設計理解に役立つ
リロケーションのオフセット / シンボルアドレス表示 相対アドレス、シンボルの値、リロケーションタイプなどを表示できるように拡張する
エラー処理・堅牢性強化 入力エラー、マッピング失敗、境界チェック、NULL ポインタ回避などの安全処理を強化する余地あり
バイナリのセキュリティ/境界チェック ファイルの長さを超えてアクセスする可能性、メモリマップ外参照などを防ぐ対策が重要
他のアーカイブフォーマット対応 GNU ar 形式の変種、BSD ar など拡張形式への対応も検討できる
こうした拡張を行えば、このコードを「簡易リンカの部品」や「解析ツール」のプロトタイプとして発展させやすくなります。
実装意図・勉強目的からの観点
以下は、こういうサンプルを読む/作るときに意識しておくとよい観点です:
「仕様 → 実装」の対応を追う
ELF/ar の仕様書や規格(ELF や ar フォーマット仕様)を参照しながら、「なぜこの実装になっているか?」を対応づけて読むとよい。
実用ツールとの比較
readelf や objdump、nm、ar コマンドなどと出力を比べてみると、どこが簡易で、どこが省略されているか見えてくる。
小さな拡張を実際に加えてみる
例えば、シンボルのバインディング表示、セクション属性出力、より詳細なリロケーションタイプのマッピング表示などを追加してみると、理解が深まる。
負荷テストや異常入力で動かす
壊れた ELF、極端に大きなファイル、空のセクション、セクションヘッダがゼロ個、リロケーションなし、など多様なケースを入れて、実装の堅牢性を試す。
他のプラットフォーム/バイナリエンディアンで動かす
リトルエンディアン vs ビッグエンディアン環境や、32bit/64bit の違いでどうなるか試してみる。
もしよければ、次回以降として binary.c(coding(2)) や combine.c(coding(3)) のソースも追って、それぞれに対して同様に解説・補足できますが、どうしますか?また、特に理解を深めたい箇所(ELF のどのヘッダ、リロケーション処理、名前解決処理など)があれば、そこに焦点を当てて補足できます。
CPUの構造と、アセンブラ・リンカ・ローダなどのツールと、動作させたい機能について深堀をお願いします。
ChatGPT:
以下では、CPU の構造と、アセンブラ・リンカ・ローダなどの開発ツール、そしてそれらを通じて「動作させたい機能」を実現する全体像を、できるだけ実装やアーキテクチャに踏み込みつつ整理します。
1️⃣ CPUの基本構造
CPU(中央処理装置)は、命令を順番に読み取り実行する「命令実行マシン」です。主な構成要素は次のとおりです。
ブロック 主な役割 実装上のキーポイント
制御ユニット (CU) 命令フェッチ→デコード→制御信号発行 マイクロコード方式 / ハードワイヤード方式
演算論理装置 (ALU) 加算・論理演算・比較など ビット幅(32/64bit)、演算器パイプライン化
レジスタ群 汎用レジスタ(GPR)、プログラムカウンタ(PC)、スタックポインタ(SP)など 命令セットに依存、レジスタファイル設計
キャッシュ L1/L2/L3。メモリアクセスを高速化 一貫性維持、ラインサイズ、置換ポリシ
パイプライン/スーパースカラ 命令の重複実行でスループット向上 ハザード制御、投機実行、分岐予測
浮動小数点演算装置 (FPU) 浮動小数点演算 IEEE754 準拠
このハードウェアが理解できるのは「機械語バイナリ命令」だけです。
例: 0x48 0x89 0xe5 (x86_64 の mov %rsp,%rbp)
2️⃣ ツールチェーン全体の流れ
高級言語から実行可能バイナリになるまでの典型的なフローをまとめます。
[ソースコード] → (コンパイラ front-end) → 中間表現
↓ back-end (コード生成)
───────────────────────────────
アセンブリ (テキスト)
↓ Assembler
───────────────────────────────
オブジェクトファイル(.o)
↓ Linker
───────────────────────────────
実行形式 (ELF/PE/Mach-O 等)
↓ Loader(カーネル)
───────────────────────────────
実メモリにマッピング
↓ CPU 実行
3️⃣ 主要ツールの役割と CPU との関係
(A) アセンブラ(Assembler)
入力: アセンブリ言語 (テキスト)
出力: オブジェクトファイル(ELF など、機械語+メタ情報)
主な処理:
命令 → オペコード変換
シンボル(ラベル)解決(ただし外部シンボルは未確定のまま残す)
再配置情報(Relocation)付与
CPUとの関係:
CPU の命令セットを理解した直接の「翻訳者」。
(B) リンカ(Linker)
入力: 複数のオブジェクトファイル・ライブラリ
出力: 実行形式バイナリ(例:ELF, Mach-O, PE)
主な処理:
外部シンボル解決(関数呼び出し、グローバル変数)
再配置:アドレス割当・ジャンプ先確定
セクション統合(.text, .data など)
スタートアップコード挿入(_start)
CPUとの関係:
実行時にCPUが解釈できる 連続した命令列とデータ配置 を完成させる。
(C) ローダ(Loader)
役割: OSカーネルが持つ機能。
実行時にファイルを読み込み、
ELF ヘッダ解析
必要な共有ライブラリをメモリにマッピング
再配置の最終適用
スタック/ヒープ準備
エントリポイント(_start)へCPUのPCを移動
までを担当。
CPUとの関係:
CPUが実際に PC = entry_point へジャンプし命令実行を開始できる状態をつくる最終ステップ。
4️⃣ 動作させたい「機能」との対応
例1: LED を点滅させたい(組込み)
機能要件: GPIOを一定周期でON/OFF
ソース: C言語でレジスタ操作
ツールチェーン:
コンパイル→アセンブル→リンク
クロスリンカはマイコンのメモリマップに合わせて配置
CPU 実行:
CPU がレジスタへの書込み命令(例 STR r0, [GPIO_PORT])を実行
ハードウェアのI/O回路がLEDを物理的に点灯
例2: 高度なアプリ(OS上)
機能要件: ネットワーク通信
ツールチェーン:
gcc/clang → ELF実行ファイル
共有ライブラリもリンカが依存情報に記録
CPU 実行:
OSが Loader でロード
syscall 命令でカーネルを呼び出し、NIC ドライバへ指示
5️⃣ gcc系とその他ツールの違い(リンカ・ロケータ・ローダ視点)
ツール系 主なリンカ 特徴
GNU (gcc, binutils) ld.bfd, ld.gold, lld ELF中心。UNIX系。多数のオプション・スクリプト可
組込み系 (ARM, Renesas など) 専用リンカ/Locator フラッシュROMや特定アドレス配置に最適化
Windows link.exe PE/COFF 形式。DLL との動的リンク
Locator は組込み向け特有で、リンカが決めた論理アドレスを実際の物理メモリ領域(ROM/RAM)へ割り当てる。
Loader はOS依存:Linuxのld.so, WindowsのPEローダなど。
6️⃣ CPUから見た「命令実行の瞬間」
フェッチ: メモリの [PC] 番地から命令を読み込む
デコード: 命令セットに沿って操作対象レジスタや即値を抽出
実行: ALU演算・メモリアクセス
ライトバック: レジスタやメモリへ結果を書込む
PC更新: 次命令へ
これをクロックごとに繰り返す。
ツールチェーンが作ったバイナリは、結局はこの単純なサイクルで一命令ずつ解釈される。
まとめ
CPUは純粋に「命令列」を実行する装置
アセンブラは人が書いたニーモニックをバイナリ命令へ翻訳
リンカは複数オブジェクトを一つにまとめ、最終的なアドレスを決定
ローダはOSが実行時にバイナリをメモリへ配置しCPUを起動
これらを通じて、**「動作させたい機能」**は電気的動作として現実世界に反映される。
機能を実現するには、ハードウェア仕様(命令セット、メモリマップ)とツールチェーン双方を理解し、
「どのレベルまでをソフトで、どこからをハードで」扱うかを設計することが肝要です。
ChatGPT の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。
ARMとRISC-Vについて深堀お願い。
ChatGPT:
以下では、ARM と RISC-V を「CPUアーキテクチャ・命令セット・開発エコシステム・応用領域」など多面的に掘り下げます。
(※ここでのARMは ARMv8/A-profile など汎用CPUを中心に、RISC-VはRV64系を主軸に説明)
1️⃣ 命令セットアーキテクチャ (ISA) の特徴比較
観点 ARM (A-profile) RISC-V
設計思想 商用RISC。省電力・高性能を両立しSoC向けに最適化 完全オープン。モジュラリティと拡張性重視
ISA種別 AArch64 (64bit)、AArch32 (Thumb含む) RV32, RV64, RV128 (拡張可)
命令形式 固定32bit (Thumbは16/32混在) ほぼ固定32bit、可変長(16/32/48/64)圧縮命令あり
レジスタ 31汎用(64bit) + SP + PC + 特殊レジスタ 32汎用(32/64bit) + PC + CSR(Control/Status)
エンディアン リトル/ビッグ両対応 (実装依存) 基本リトル。ビッグ対応は拡張
SIMD/ベクトル NEON, SVE V-extension (ベクトル長非依存VLEN)
例外/割込み ARMv8: GIC + EL0~EL3特権レベル 拡張: M/S/Uモード。簡潔なトラップ機構
拡張方針 ISAは固定、独自カスタム不可(ライセンス下) ベース + 拡張(I,M,A,F,D,Q,V,Bなど) + カスタム自由
2️⃣ オープン性とライセンス
ARM:
ISA は ARM Ltd が所有。
SoCメーカーはIPライセンス契約が必要(コア設計ARM Cortexや独自実装許諾)。
料金: ロイヤルティ & 前払いライセンス費。
RISC-V:
ISA仕様は 完全オープン (BSDライセンス類似)。
誰でもISAを実装可能。
コア実装はオープンソース(例: Rocket, BOOM) も商用(例: SiFive) も混在。
独自拡張を自由追加できるため、研究用途・ドメイン特化SoCに強み。
3️⃣ マイクロアーキテクチャ実装例
層 ARM 例 RISC-V 例
ハイエンドサーバ Neoverse V2, Amazon Graviton3 Ventana Veyron V1
モバイル Cortex-A78, X4 Alibaba T-Head Xuantie C910
組込み Cortex-M0/M3/M4 SiFive E31, GD32VF103
学術研究 – Berkeley RocketChip, BOOM
ARMはコアIPとツール群をワンストップ提供。
RISC-VはISAのみ規定、実装は多様で競争的。
4️⃣ 開発エコシステム
ARM
コンパイラ: GCC, LLVM, Arm Compiler, DS-5
ツールチェーン: 成熟。CMSIS, TrustZone, SVE対応。
OSサポート: Linux (AArch64), Android, RTOS (FreeRTOS, Zephyr)など。
RISC-V
コンパイラ: GCC, LLVM, Rust, Go も急拡大。
ツール: OpenOCD, QEMU, Spike, Renode。
OS: Linux, FreeBSD, Zephyr, RTOS, Debian/Ubuntu 公式サポート進展。
5️⃣ ハードウェア的特徴
項目 ARM RISC-V
パイプライン 3段〜10+段、big.LITTLE、アウトオブオーダ実装多い 実装自由。シンプル5段からOOOまで
省電力技術 big.LITTLE, DVFS, TrustZone 実装依存だがシンプル設計で低電力化しやすい
カスタム命令 限定(ARMv8.2+ SVE等はArm定義) 自由。AI向けや暗号向け独自命令追加可
6️⃣ 応用領域と戦略
ARM
スマホSoC (Apple Mシリーズ, Snapdragon)
車載 (Automotive-grade Cortex-R)
サーバ (Graviton, Ampere Altra)
組込み(M, Cortex-A低消費)
強み: 長年のエコシステム、豊富なツール、IP供給網、安定したソフトウェア互換性。
RISC-V
マイクロコントローラ (IoT、低価格MCU)
FPGA研究・教育
AI/MLカスタムSoC (Tensor向け独自命令)
高性能サーバ(近年試験段階)
強み: ライセンス料ゼロ、拡張自由度、研究・産業が一体で成長。
7️⃣ 開発者視点の選択指標
要件 適した選択
既存OS/ミドルウェアとの互換性重視 ARM
ライセンス費を抑えたい、独自命令追加 RISC-V
高度な商用サポート・ツール ARM
研究・教育・プロトタイピング RISC-V
8️⃣ ツールチェーンとの関わり
アセンブラ: arm-none-eabi-as / riscv64-unknown-elf-as
リンカ: GNU ld / lld 共通
ローダ: Linuxカーネルやブートローダ(U-Boot, OpenSBI)
CPUが理解する機械語が異なるだけで、C→ELF→ロードの流れは同じ。
まとめ
ARM は成熟した商用RISCでモバイル・サーバ双方を席巻。堅牢なツールと広範なサポート。
RISC-V はオープンISAで拡張自由。ライセンス料ゼロが強みで、IoTからハイエンドまで急拡大。
両者とも「RISC思想」を基盤にしつつ、ARMはエコシステム完成度, RISC-Vは自由度とコストが差別化ポイント。
開発者は、用途(モバイル/組込み/サーバ)、コスト構造、独自命令の必要性を軸に選択するとよいでしょう。
ChatGPT の回答は必ずしも正しいとは限りません。重要な情報は確認するようにしてください。
参照
ChatGPT利用の技4つ with ChatGPT
https://qiita.com/kaizen_nagoya/items/4a178bd6a09a4a471a7f
ChatGPTによるQiita記事の改良と補足
https://qiita.com/kaizen_nagoya/items/20604d6dd0702ab95c2f
ChatGPTによるQiita記事の改良と補足(2)
https://qiita.com/kaizen_nagoya/items/996275307ffc8c1243f8
本から始める 面倒なことはChatGPTにやらせよう by からあげ
https://qiita.com/kaizen_nagoya/items/f5ce2a18db54b5610e4b
MCP入門 〜面倒なことはAIエージェントにやらせよう〜 by からあげ を聞きながら
https://qiita.com/kaizen_nagoya/items/54b648c838fae8d57e38
【松尾研LLMコミュニティ】面倒なことはLLMにやらせよう "Beginning LLM"2024年10月17日 AI(9)
https://qiita.com/kaizen_nagoya/items/efdc23fbe67cdae2126e
設計:ChatGPTで特異解か一般解を求める AI(1)
https://qiita.com/kaizen_nagoya/items/4dec580e16a7c84b0ec4
みんなの使い方から学ぶ
https://qiita.com/kaizen_nagoya/items/8e7de492d896df94a36e
AI・機械学習 昨日、今日、明日
https://qiita.com/kaizen_nagoya/items/adb184c8fc7a65ac9756
DNA LLM and genome for survey 2200 papers by name.
https://qiita.com/kaizen_nagoya/items/ce8a28d6072f340a9d59
ChatGPTから学ぶ 3倍褒めて3分の1貶す
https://qiita.com/kaizen_nagoya/items/91e70fd8caa25076718b
AI時代の相棒は、キミに決めた! 推しのAIエージェントをシェアしよう!企画参加まとめへの序章
https://qiita.com/kaizen_nagoya/items/e3fd7557bac97d1b88f2
記事投稿数、いいね数の目標設定して ChatGPTに聞いてみた。
https://qiita.com/kaizen_nagoya/items/019e2ad9c3e45e45854e
AI時代の相棒は、キミに決めた! ChatGPT推し ver.0
https://qiita.com/kaizen_nagoya/items/8068a884fb2e64cd3c4f
無料ChatGPTの処理限界
https://qiita.com/kaizen_nagoya/items/84683aee26d9f4a28af0
by ChatGPT, with ChatGPT and people opinions.
https://qiita.com/kaizen_nagoya/items/57f00f9b48b25bc231e6
ChatGPTの使い方の利点と課題 by ChatGPT
https://qiita.com/kaizen_nagoya/items/0f469e473a6ed0407daa
DataRobot 風 AI agent Robotをあなたに
https://qiita.com/kaizen_nagoya/items/1ca8ca1dedefaf739d16
ChatGPTの賢い使い方
https://qiita.com/kaizen_nagoya/items/3a7e4583553543eeeeb3
ChatGPTの弱みをあなたに
https://qiita.com/kaizen_nagoya/items/3c97c63a22939e203905
ChatGPTで裸の王様
https://qiita.com/kaizen_nagoya/items/8377be38d3a763e93811
設計 仕様 制約 AI利用開発の鍵 by ChatGPT
https://qiita.com/kaizen_nagoya/items/1b9cb2f9d26308d84791
PowerPoint 筋書き(outline), 見直し(review), 見栄え加工 by ChatGPT
https://qiita.com/kaizen_nagoya/items/37bb97fc250fca37295b
逃げ回るChatGPTを追い詰めるには
https://qiita.com/kaizen_nagoya/items/cd60426e626ba05e0377
三人寄れば文珠の知恵は直交する能力前提 by ChatGPT
https://qiita.com/kaizen_nagoya/items/512e5611615e2426bb42
プログラマ3年で社長事業(未成年編) 博士論文支援追加
https://qiita.com/kaizen_nagoya/items/326452b5bf29c144c307
自殺防止手引き原稿 補足 by ChatGPT
https://qiita.com/kaizen_nagoya/items/7e459fa7edf7205c2667
しつけ(discipline) の測定視点 by ChatGPT
https://qiita.com/kaizen_nagoya/items/6b5ce03c545f7bbd8723
技術者は英語を学ぶ必要はない。英単語の羅列でいい=プログラム。
https://qiita.com/kaizen_nagoya/items/4fc3963a21e0339fd1c9
猫中心設計から鳥中心設計へ part2
https://qiita.com/kaizen_nagoya/items/4d7a5a33c85e0b01dc5d
プログラマ必須科目 ChatGPTにも確認
https://qiita.com/kaizen_nagoya/items/7b30d9d119792130facd
なんで音楽とプログラムの関係がうまく書けないか。
https://qiita.com/kaizen_nagoya/items/489a68d360df4b26f87d
AI利用業務手引き
https://qiita.com/kaizen_nagoya/items/f201b292f37dba16e9ef
C言語(C++)が必要な人と必要ない人
https://qiita.com/kaizen_nagoya/items/2afe9e846b55b24cb6f1
C言語(C++)が必要な人、必要ない人 ChatGPT
https://qiita.com/kaizen_nagoya/items/a074cb8cd292d8d94bd4
C言語を習得する3つの方法
https://qiita.com/kaizen_nagoya/items/84cab0888c193bba429b
C言語を習得する3つの方法 ChatGPT
https://qiita.com/kaizen_nagoya/items/4a3518a18fa49f46787f