論文の概要: Forcrat: Automatic I/O API Translation from C to Rust via Origin and Capability Analysis
- arxiv url: http://arxiv.org/abs/2506.01427v1
- Date: Mon, 02 Jun 2025 08:34:06 GMT
- ステータス: 翻訳完了
- システム内更新日: 2025-06-04 21:47:34.104329
- Title: Forcrat: Automatic I/O API Translation from C to Rust via Origin and Capability Analysis
- Title(参考訳): Forcrat: Origin and Capability AnalysisによるCからRustへの自動I/O API変換
- Authors: Jaemin Hong, Sukyoung Ryu,
- Abstract要約: ライブラリ機能の重要なサブセットであるI/O APIを置き換えることに重点を置いています。
本稿では,2つの静的解析手法,起点解析と機能解析,エラーソース解析を提案し,その結果を用いてI/O APIを置き換える。
提案手法は,(1)変換後にテストスイートをパスした32プログラム,(2)14秒で422kLOCを効率よく解析,変換し,(3)広く適用でき,I/O APIコールの82%を置き換える。
- 参考スコア(独自算出の注目度): 10.16257074782054
- License: http://creativecommons.org/licenses/by/4.0/
- Abstract: Translating C to Rust is a promising way to enhance the reliability of legacy system programs. Although the industry has developed an automatic C-to-Rust translator, C2Rust, its translation remains unsatisfactory. One major reason is that C2Rust retains C standard library (libc) function calls instead of replacing them with functions from the Rust standard library (Rust std). However, little work has been done on replacing library functions in C2Rust-generated code. In this work, we focus on replacing the I/O API, an important subset of library functions. This poses challenges due to the semantically different designs of I/O APIs in libc and Rust std. First, the two APIs offer different sets of types that represent the origins (e.g., standard input, files) and capabilities (e.g., read, write) of streams used for I/O. Second, they use different error-checking mechanisms: libc uses internal indicators, while Rust std uses return values. To address these challenges, we propose two static analysis techniques, origin and capability analysis and error source analysis, and use their results to replace the I/O API. Our evaluation shows that the proposed approach is (1) correct, with all 32 programs that have test suites passing the tests after transformation, (2) efficient, analyzing and transforming 422k LOC in 14 seconds, and (3) widely applicable, replacing 82% of I/O API calls.
- Abstract(参考訳): CからRustへの変換は、レガシーシステムプログラムの信頼性を高めるための有望な方法である。
業界は自動C-to-Rust翻訳機C2Rustを開発したが、その翻訳は相変わらず不満足である。
主な理由は、C2RustがRust標準ライブラリ(Rust std)の関数に置き換えるのではなく、C標準ライブラリ(libc)関数呼び出しを維持していることである。
しかし、C2Rust生成コードのライブラリ関数を置き換える作業はほとんど行われていない。
この作業では、ライブラリ機能の重要なサブセットであるI/O APIを置き換えることに重点を置いています。
これは、libcとRust stdにおけるI/O APIの設計が意味的に異なるため、課題となる。
まず、2つのAPIは、I/Oで使用されるストリームの起源(例、標準入力、ファイル)と機能(例、読み取り、書き込み)を表す異なるタイプのセットを提供する。
libcは内部インジケータを使用し、Rust stdは戻り値を使用する。
これらの課題に対処するため,本研究では,起源解析と機能解析,エラーソース解析という2つの静的解析手法を提案し,その結果を用いてI/O APIを置き換える。
提案手法は,(1)変換後にテストスイートをパスした32プログラム,(2)14秒で422kLOCを効率よく解析,変換し,(3)広く適用でき,I/O APIコールの82%を置き換える。
関連論文リスト
- PR2: Peephole Raw Pointer Rewriting with LLMs for Translating C to Safer Rust [9.867844389029509]
本稿では,個々の関数の生ポインタを,適切なRustデータ構造に引き上げる,ピープホール生ポインタ書き換え手法を提案する。
PR2は28の現実世界のCプロジェクト間で13.22%のローカルな生ポインタをうまく除去する。
PR2はプロジェクトの変換を平均5.44時間で完了し、平均コストは1.46ドルである。
論文 参考訳(メタデータ) (2025-05-07T23:30:27Z) - CRUST-Bench: A Comprehensive Benchmark for C-to-safe-Rust Transpilation [63.23120252801889]
CRUST-Benchは100のCリポジトリのデータセットで、それぞれが安全なRustとテストケースで手書きのインターフェースとペアリングされている。
我々は、このタスクで最先端の大規模言語モデル(LLM)を評価し、安全で慣用的なRust生成が依然として難しい問題であることを確認した。
最高のパフォーマンスモデルであるOpenAI o1は、ワンショット設定で15タスクしか解決できない。
論文 参考訳(メタデータ) (2025-04-21T17:33:33Z) - RustMap: Towards Project-Scale C-to-Rust Migration via Program Analysis and LLM [13.584956125542396]
Rustは、Cのパフォーマンスを維持しながら、優れたメモリ安全性を提供する。
C2Rustのような既存の自動翻訳ツールは、構文的、テンプレートベースの翻訳に依存しすぎている可能性がある。
本稿では,新しい依存誘導型大規模言語モデル (LLM) をベースとしたC-to-Rust変換手法であるRustMapを提案する。
論文 参考訳(メタデータ) (2025-03-22T11:57:45Z) - LLM-Driven Multi-step Translation from C to Rust using Static Analysis [27.122409727034192]
レガシー言語で書かれたソフトウェアをCからRustなどのモダン言語に翻訳することは、メモリ安全性を改善する上で大きなメリットがある。
LLM駆動型C-to-Rustゼロショット変換ツールであるSACTORを2段階の翻訳手法を用いて提案する。
SACTORは、既存の方法と比較して、より自然でRustに準拠した翻訳を生成する。
論文 参考訳(メタデータ) (2025-03-16T14:05:26Z) - ReF Decompile: Relabeling and Function Call Enhanced Decompile [50.86228893636785]
逆コンパイルの目標は、コンパイルされた低レベルコード(アセンブリコードなど)を高レベルプログラミング言語に変換することである。
このタスクは、脆弱性識別、マルウェア分析、レガシーソフトウェアマイグレーションなど、さまざまなリバースエンジニアリングアプリケーションをサポートする。
論文 参考訳(メタデータ) (2025-02-17T12:38:57Z) - C2SaferRust: Transforming C Projects into Safer Rust with NeuroSymbolic Techniques [16.111888466557144]
我々はC2SaferRustを紹介します。
最初にC2Rustを使って、Cコードを非慣用的で安全でないRustに変換する。
安全でないRustコードをスライスに分解し、LLMによってより安全なRustに個別に変換します。
各スライスを処理した後、エンドツーエンドのテストケースを実行して、コードが期待通りに機能していることを確認する。
論文 参考訳(メタデータ) (2025-01-24T05:53:07Z) - SVTRv2: CTC Beats Encoder-Decoder Models in Scene Text Recognition [77.28814034644287]
CTCモデルであるSVTRv2を提案する。
SVTRv2は、テキストの不規則性に対処し、言語コンテキストを利用するための新しいアップグレードを導入した。
我々は,SVTRv2を標準ベンチマークと最近のベンチマークの両方で評価した。
論文 参考訳(メタデータ) (2024-11-24T14:21:35Z) - FoC: Figure out the Cryptographic Functions in Stripped Binaries with LLMs [51.898805184427545]
削除されたバイナリの暗号関数を抽出するFoCと呼ばれる新しいフレームワークを提案する。
まず、自然言語における暗号関数のセマンティクスを要約するために、バイナリ大言語モデル(FoC-BinLLM)を構築した。
次に、FoC-BinLLM上にバイナリコード類似モデル(FoC-Sim)を構築し、変更に敏感な表現を作成し、データベース内の未知の暗号関数の類似実装を検索する。
論文 参考訳(メタデータ) (2024-03-27T09:45:33Z)
関連論文リストは本サイト内にある論文のタイトル・アブストラクトから自動的に作成しています。
指定された論文の情報です。
本サイトの運営者は本サイト(すべての情報・翻訳含む)の品質を保証せず、本サイト(すべての情報・翻訳含む)を使用して発生したあらゆる結果について一切の責任を負いません。