1

次のコードは x86 では正しく機能しますが、mips プラットフォームでは機能しません。


  char *str = "11111111-22222222 r-xp 00000000 00:0e 1843624    /lib/libdl.so.0";
  unsigned long long start_addr, stop_addr, offset;
  char* access = NULL;
  char* filename = NULL;
  sscanf(str, "%llx-%llx %m[-rwxp] %llx %*[:0-9a-f] %*d %ms",
           &start_addr, &stop_addr, &access, &offset, &filename);

  printf("\n start : %x, stop : %x, offset : %x\n",start_addr,stop_addr,offset);
  printf("\n Permission : %s\n",access);
  printf("\n Filename : %s\n",filename);

x86 では次のように出力されます。

 start : 11111111, stop : 22222222, offset : 0
 Permission : r-xp
 Filename : /lib/libdl.so.0

しかし、ミップではそれが表示されています:

 start : 7ff20f5b, stop : 11111111, offset : 0
 Permission : (null)
 Filename : (null)

mipsel-linux-uclibc ツールチェーンを使用してコンパイルしました。誰か助けてくれませんか。

4

1 に答える 1

0

C コードは、SunOS でセグメンテーション違反を生成します。そのため、Linux では動作しますが、RISC アーキテクチャの lijke MIPS(?) では動作しません。デバッガを使用する理由を調査する必要があるgdbため、コマンドを使用するman gdbか、gdb を実行してブレークポイントを挿入するか、演習として行います。

于 2013-05-22T21:10:34.463 に答える