-1

内部に main() 関数があり、 crt... オブジェクトにリンクして実行可能にする必要があるオブジェクトファイルがあります。残念ながら、私はコンパイルしかできず、リンクして実行可能ファイルにすることはできません。

そのため、ac プログラムを作成して (GCC とリンカーが動作している PC 上で)、それ自体の最後にオブジェクトをアタッチし、実行時にアタッチされたコードを実行する (リンクされたオブジェクトをシミュレートする) ことにしました。

DL API を見ましたが、私が言った問題にそれを使用する方法がわかりません。

sb が、実行可能ファイルの最後に添付されたコードを実行する方法を知るのに役立ちますように。

4

1 に答える 1

1

そうしないでください。それは混乱するでしょう....そして、少なくともプログラムが動的にリンクされている場合  libc6.so(たとえば、ASLRのため) 、おそらく確実に機能しません。

共有オブジェクトと動的にリンクされたライブラリを使用するだけです (動的リンカーのウィキページを参照してください)。dlopen(3)などについて学ぶ必要があります。

もしあなたが本当に主張するなら、もっと多くのことを学ぶために何週間もかけてください: Linker and Loadersに関する Levine の本を読んだり、Advanced Linux Programmingを読んだり、多くの man ページ ( execve(2)mmap(2)elf(5)ld. so(8) , ...) および のカーネル コードexecvemmapGNU libcおよびMUSL libcソース コード (ダイナミック リンカの実装に関する詳細)、x86-64 ABIまたはターゲット プロセッサのABI (それはARM?)、GNU binutilsなどについて詳しく学んでください。

要するに、あなたがすでに専門家でない限り、例えば独自の動的リンカを実装することができない限り、あなたの人生は短すぎます。

補遺

どうやらあなたの本当の問題はARMでtinyccを使用しているようです(Androidでは推測しています)。その後、彼らのメーリング リストで質問するか (おそらく何らかのパッチを提供してください)、単純に binutils を使用して独自の GNU ldリンカー スクリプトを作成し、それを機能させます。その後、質問はまったく別のものになり、元の質問とはまったく関係がなくなります。Google検索によると、それを解決するための以前の試みがいくつかあるかもしれません.

于 2013-10-31T15:48:21.290 に答える