2011-03-25 9 views

답변

3

이 문맥에서 -0x7ec55ec00xffffffff813aa140 (즉, -0x7ec55ec0 + 0x10000000000000000)을 쓰는 짧은 방법 일뿐입니다.

아마도 주소에 점프 테이블이 있으며, 색인 번호는 rax입니다. 그것이 도움이 있다면

, 인텔 어셈블리 구문에서 동일한 명령은 다음과 같습니다

call qword ptr [0xffffffff813aa140 + rax*8] 
+0

그래서'*'는 어셈블리에서'[]'로 평가됩니다, 맞습니까? – compiler

+0

@ compiler : 예, 그렇습니다. –

2

는 부정적인 주소가 없습니다. 주소는 서명되지 않습니다.

높은 비트가 설정된 주소를 가져 와서 부호있는 숫자로 서식을 지정했거나 서명 된 숫자로 서식을 지정하는 방법을 사용했다는 것입니다.

+0

주소의 서명 여부는 해석 및/또는 개인 취향에 달려 있습니다. 이를 보는 한 가지 방법은 x64/x86_64에서 47 비트 부호로 주소를 수락하면 주소 공간은 연속적이며 '[-2^48 .. 2^48-1]'입니다. 당신이 서명하지 않는다고 주장한다면, 유효한 주소 범위를 분리하는 "표준적인"/ "비정규적인"것,'[0 .. 2^48-1]'과'[2^64-2^48 .. 2^64-1]'(그리고 그 사이의 어떤 것도 "비논리적"이고 표현할 수 없음). –

+0

"interpretation"에 의해, 숫자가 문자열로 어떻게 포맷되는지 의미한다면, 그것은 제가 말한 것과 똑같습니다. 그러나, 나는 이것이 "개인적 취향"과 관련이 있는지를 보지 못한다. 네가 부정적인면에서 컴퓨터 주소를 어디에서 본적이 있니? –

+0

"표준"주소 지정 (주소 공간에 구멍이있는 주소 공간)이 작동하는 방식 - 수용하기 쉬운 것, 총 주소 범위가 연속적이며 (음수 일 수 있음) 또는 "값"범위가있는 것의 간단한 결과입니다. 주소가 아닌가요? 또한, _offsets_가 음수가 될 수 있다는 것을 받아들이는 데 문제가 없으며, _addresses_가 음수가되는 것을 멈추게하는 것은 무엇입니까? –

0

"0x7ec55ec0"은 음수 인 오프셋입니다. 그리고 예, 8 * % rax의 값에서 뺍니다. 이 빼기는 "0xffffffff8100b9e4"를 추가하는 것과 64 비트 부호없는 두 표현의 표현입니다.

아마도 % rax * 8의 값은 0x7ec55ec0보다 클 것이므로 코드 또는 데이터 세그먼트의 일반적인 범위에있는 값이됩니다.

x86 플랫폼의 주소 오프셋은 실제로 항상 서명되어 있지만 (8 비트 및 32 비트 오프 훼이크 모두), 결과 주소는 물론 서명되지 않습니다.