공유 라이브러리를 생성하는 makefile이 있습니다. 다른 쉘 (VxWorks wrenv 및 Cygwin)에서 make를 호출하면 다른 libs가 생성됩니다. Thy VxWorks 버전이 Cygwin 버전을 사용하고 있지 않습니다. 차이는 매우 작으며 readelf
프로그램으로는 보이지 않습니다.링커에서 다른 코드 (objdump)를 생성합니다.
objdumparm -S *.so
을 사용하면 기능의 끝에서 차이가 나타납니다. 다음 출력을 참조하십시오.
예 1 : (마지막 두 라인이 다를)
시그윈 :
00010a14 <_ZN3rag3MD511save_digestEPhPKm>:
10a14: e1a0c00d mov ip, sp
10a18: e92dda30 push {r4, r5, r9, fp, ip, lr, pc}
...
10b18: 00000000 andeq r0, r0, r0
10b1c: 3b6e71a1 blcc 1bad1a8 <_stack+0x1b2d1a8>
10b20: 505c3d7f subspl r3, ip, pc, ror sp
VxWorks와 :
00010a14 <_ZN3rag3MD511save_digestEPhPKm>:
10a14: e1a0c00d mov ip, sp
10a18: e92dda30 push {r4, r5, r9, fp, ip, lr, pc}
...
10b18: 00000000 andeq r0, r0, r0
10b1c: 00000338 andeq r0, r0, r8, lsr r3
10b20: 0000033c andeq r0, r0, ip, lsr r3
또는 실시 예 2 : (마지막 라인이 다르다)
시그윈 :
,357,583,210VxWorks와 : 링커
00010b7c <_ZN3rag3MD55beginEv>:
10b7c: e1a0c00d mov ip, sp
10b80: e92dda10 push {r4, r9, fp, ip, lr, pc}
...
10bd4: e89daa10 ldm sp, {r4, r9, fp, sp, pc}
10bd8: 00000000 andeq r0, r0, r0
10bdc: 000005ec andeq r0, r0, ip, ror #11
파라미터는 동일하다. 이러한 차이점은 재배치 과정에서 발생합니까?
왜 이런 일이 일어나는 이유는 무엇입니까?
컴파일러의 매개 변수는 무엇입니까? 그리고 btw. 어떤 건축인가? 어쩌면 두 쉘이 다른 모드에서 실행 중일 수 있습니다. 그러면 컴파일러가 어떻게 든이 모드를 상속합니까? (64/32 비트, 팔 엄지 등) – PlasmaHH