2010-08-08 6 views
2

어떻게 .byte 0x36 또는 .byte 0x26 A의 추가하지 않고 SS: 또는 & T 조립 구문을 사용하여 ES: 앞에 추가 할 수 있습니까?가 어떻게이`SS 앞에 추가 할 수 있습니다`또는`ES :`사용하여 AT & T 어셈블리 구문

즉. 내가 사용하지 않고 & T AT 인텔 구문에서 mov dword ptr ss:[esp+0x10], offset foo을 변환 할 수있을 것입니다 방법 :

.byte 0x36 
movl $foo, 0x10(%esp) 

나는 바이너리를 통해보고, 경고없이 조립 movl $foo, %ss:0x10(%esp)을 시도했지만 한 여전히 SS:

답변

3

에 추가하지 않습니다 IIRC의 경우 ESPEBP 레지스터와 함께 사용할 때는 SS: 접두사가 필요하지 않습니다.이 경우 이미 기본값이기 때문입니다.

이것은 어셈블러가 공간을 절약하기 위해 단순히 생략하는 이유 일 수 있습니다. 그러므로 SS: 접두사를 수동으로 0x36 바이트로 내 보내야합니다. 어셈블러는 원시 바이트를 수정하지 않기 때문입니다.

+0

오, 나는 몰랐다! MSVC 어셈블러는 그것을 추가하는 것처럼 보입니다. 그러나'movl $ foo, % ss : 0x10 (% esp)'이 올바른 방법입니까? –

+0

알겠습니다. 방금 확인했습니다. –