2012-04-22 7 views
4

IDA에서 일부 Delphi 어셈블리를 사용하고 있습니다.델파이 어셈블리 호출

그리고 나는 이해할 수없는 많은 시스템 호출을 알아 차렸고, 그들에 대한 문서를 찾을 수 없었습니다. 예 : 알 수없는 함수 LStrClr (void *)에 대한 호출이 많이 있음을 발견했습니다.

가장 좋은 사이트는이 사이트입니다. http://www.delphibasics.co.uk/ByLetter.asp?Letter=A 하지만 LStrClr을 비롯한 많은 함수 호출이 부족합니다.

답장을 보내 주셔서 감사합니다. Michael Engstler.

답변

7

LStrClr은 긴 문자열 지우기를 의미합니다. 긴 문자열 변수를 지우는 데 사용됩니다. 당신이 쓰는 즉, :

s := ''; 

는 컴파일러는 런타임 지원 기능 _LStrClr에 대한 호출을 생성합니다. 유니 코드 델파이에서는 이되고, 여기서 U는 AnsiString이 아니라 UnicodeString을 나타냅니다.

개인 구현 세부 사항이므로 공식적인 문서는 없습니다. 그러나 Delphi RTL의 소스 코드가 있습니다. 이를 참조하면 그러한 호출은 이해하기 쉽습니다.

+0

@MichaelEngstler - 사용중인 Delphi의 버전을 언급하지 않았습니다. 이러한 낮은 수준의 호출 ("구현 세부 사항")은 다른 버전 (예 : 8 비트/Win32 Borland Delphi 7과 기본 Unicode Embarcadero XE2) 사이에서 매우 다양 할 수 있습니다. – paulsm4

+0

'_LStrXXX()'함수는 항상'AnsiString' (그리고'UTF8String'과'RawByteString'처럼 D2009 +의'AnsiString' 기반 타입)과 함께 사용됩니다. AnsiString이 처음 소개 된 이래로 변하지 않았습니다. 'UnicodeString'은'_UStrXXX()'함수를 사용하고'WideString'은'_WStrXXX' 함수를 사용합니다. 32 비트 대 64 비트는 차이를 만들지 않습니다. –