0

*.cppg ++を使用してコンパイルする複数のファイルで構成される特定のプロジェクトがあります。コードを追加するために 1 つのソース ファイルを変更しました。プロジェクトを再度ビルドします。私がしたことを確認するだけです

diff -s origbinaryfile changedbinaryfile

ファイルが同一であることがわかりましたが、これは奇妙でした。追加のコードを追加し、生成された Linux バイナリの違いを確認したかったからです。

既存のコードに追加の case ステートメントであるコードを追加しました。たとえば、switch case以前に持っていた

switch(x) {
case DEV1:
 ...
case DEV2:
 ...

変更したものは

switch(x) {
    case DEV1:
     ...
    case DEV2:
     ...
    case DEV3:

DEV1DEV2DEV3enum 宣言の列挙子です。

nmコマンドまたはその他のコマンドを使用して、追加されたコードがバイナリに実際に存在するかどうかを確認するにはどうすればよいですか?

その他の方法で?

[ばかげているように聞こえるかもしれませんが、コンパイル時にエラーが発生していないことを確認するために慎重に行いました]

4

1 に答える 1

0

それはいけません。
もちろん、ファイルを逆アセンブルして asm コードを比較することはできますが、コンパイラによって大幅に最適化されているため、そのような方法では意味のある結果はほとんど得られません。

または、コマンドを使用してファイルを比較することもできます。cmpこれはバイナリ ファイルを対象としており、diff.

ただし、バイナリの違いは、コードが実際に変更されたことを 100% 保証するものではありません。コンパイラは通常、デバッグ情報を追加し、タイムスタンプをコンパイルするため、同じコードを 2 回続けてコンパイルすると、バイトが異なる 2 つのバイナリが生成されます。

于 2013-01-17T10:57:22.650 に答える