±âÃÊ
	- WORD·Î ÂüÁ¶ ½Ã ¸Þ¸ð¸® »óÀÇ 4¹ÙÀÌÆ® Áß ¾Õ 2¹ÙÀÌÆ®¿Í µÞ 2¹ÙÀÌÆ® Áß ¾îµð°¡ ÂüÁ¶µÇ´Â°¡?
	=> ¾Õ 2¹ÙÀÌÆ® (little endian)

	- -3Àº ¸Þ¸ð¸®¿¡ ¾î¶»°Ô ÀúÀåµÇ´Â°¡?
	=> 0xFFFFFFFD 

	0xfffffffd 0xfffffffe  0xffffffff 0
	
	1. -3ÀÇ Àý´ë°ª => 3 (00000011)
	2. 00000000 00000000 00000000 00000011 => 1ÀÇ º¸¼ö 
 	   => 11111111 11111111 11111111 11111100
	3. 2ÀÇ º¸¼ö (+1) 
	   => 11111111 11111111 11111111 11111101
	4. 16Áø¼ö => FF FF FF FD

	Âø°¢Çϱ⠽¬¿î ºÎºÐ : 10 00 00 11 => -3??
	1ÀÇ º¸¼ö¿Í 2ÀÇ º¸¼ö ¼³¸í ÇÊ¿ä
	
TO DO:
	- °¢ ÀνºÆ®·°¼Çº°·Î ±×¸² ¼³¸í Ãß°¡


%REG : CPU ·¹Áö½ºÅ͸¦ ÀǹÌÇÕ´Ï´Ù.
VALUE : »ó¼ö °ªÀ» ÀǹÌÇÕ´Ï´Ù.


----------------------------------------------------------------------------------------------------------------

ADD %REG, VALUE : ·¹Áö½ºÅÍ¿¡ °ªÀ» ´õÇÕ´Ï´Ù.

	[»ç¿ë ¿¹Á¦]
	
	ADD ESP, 0x10 : ESP¿¡ 0x10À» ´õÇÕ´Ï´Ù.

----------------------------------------------------------------------------------------------------------------

DEC %REG : ·¹Áö½ºÅÍÀÇ °ªÀ» -1 °¨¼Ò½Ãŵ´Ï´Ù.

----------------------------------------------------------------------------------------------------------------

PUSH : 4byte Å©±âÀÇ °ªÀ» ½ºÅÿ¡ Áý¾î ³Ö½À´Ï´Ù.

	[»ç¿ë ¿¹Á¦]

	PUSH EAX : EAX ·¹Áö½ºÅÍÀÇ °ªÀ» ½ºÅÿ¡ Áý¾î ³Ö½À´Ï´Ù.

	PUSH 0x41414141 : 0x41414141À» ½ºÅÿ¡ Áý¾î ³Ö½À´Ï´Ù.

----------------------------------------------------------------------------------------------------------------

POP : ½ºÅà ÃÖ»óÀ§ÀÇ 4byte¸¦ ²¨³»¿É´Ï´Ù.

	[»ç¿ë ¿¹Á¦]

	POP EAX : ½ºÅà ÃÖ»óÀ§ÀÇ 4byte¸¦ ²¨³»¿Í EAX¿¡ ÀúÀåÇÕ´Ï´Ù.

----------------------------------------------------------------------------------------------------------------

MOV DST, SRC : SRC¿¡ ÇØ´çÇÏ´Â °ªÀ» DST·Î º¹»çÇÕ´Ï´Ù. 
	
	[»ç¿ë ¿¹Á¦]

	MOV EBP, ESP : ESP ·¹Áö½ºÅÍÀÇ °ªÀ» EBP ·¹Áö½ºÅÍ·Î º¹»çÇÕ´Ï´Ù.

	MOV EAX, DWORD PTR FS:[0] : FS:[0]ÀÇ °ªÀ» EAX ·¹Áö½ºÅÍ·Î º¹»çÇÕ´Ï´Ù.

	MOV DWORD PTR SS:[EBP-4], EAX : EAXÀÇ °ªÀ» SS:[EBP-4]¿¡ ÇØ´çÇÏ´Â ÁÖ¼Ò·Î º¹»çÇÕ´Ï´Ù.

	MOV DWORD PTR SS:[EBP-4], DWORD PTR FS:[0] : ÀÌ·± ¹®¹ýÀº Á¸ÀçÇÏÁö ¾Ê½À´Ï´Ù.

----------------------------------------------------------------------------------------------------------------

MOVZX DST, SRC : SRC¿¡ ÇØ´çÇÏ´Â °ªÀ» DST·Î º¹»çÇϸç, ³²´Â °ø°£Àº ¸ðµÎ 0À¸·Î ä¿ó´Ï´Ù.

----------------------------------------------------------------------------------------------------------------

MOVSX DST, SRC : SRC¿¡ ÇØ´çÇÏ´Â °ªÀ» DST·Î È®Àå º¹»çÇϸç, SRC°¡ À½¼öÀÏ °æ¿ì¿£ È®ÀåµÇ´Â °ø°£À» ¸ðµÎ 1·Î ä¿ó´Ï´Ù.

È®Àå º¹»çÀ̱⠶§¹®¿¡ BYTE -> WORD ȤÀº WORD -> DWORD·Î º¹»çµÇ¾î¾ß ÇÕ´Ï´Ù.
BYTE -> DWORDµµ ¿ª½Ã °¡´ÉÇÕ´Ï´Ù.
ÇÏÁö¸¸ DWORD -> DWORD³ª WORD -> WORD ȤÀº BYTE -> BYTE¿Í °°ÀÌ Å©±â È®ÀåÀÌ ¾øÀ¸¸é ¹®¹ý¿¡ ¾î±ß³³´Ï´Ù.
¸¶Âù°¡Áö·Î DWORD -> WORD¿Í °°ÀÌ Å©±â°¡ Ãà¼ÒµÇ´Â °æ¿ìµµ ¹®¹ý¿¡ ¾î±ß³³´Ï´Ù.

ex> MOVSX EAX,WORD PTR DS:[ESI]

[ESI] : 0x00001234
=> °á°ú - EAX : 0x00001234

ex2> MOVSX EAX,WORD PTR DS:[ESI]

[ESI] : 0x0000F034 (ÃÖ»óÀ§ ¹ÙÀÌÆ®°¡ 1À̹ǷΠÀ½¼ö)
=> °á°ú - EAX : 0xFFFFF034

ÀÌó·³ È®Àå º¹»ç ½Ã ºÎÈ£ Á¤º¸¸¦ ±×´ë·Î À¯ÁöÇϱâ À§ÇØ MOVSX°¡ »ç¿ëµË´Ï´Ù.

----------------------------------------------------------------------------------------------------------------	

:1
JE
JNE
JZ
JNZ
JL
JNL
JB
JNB
JG
JNG
JLE
JGE

----------------------------------------------------------------------------------------------------------------

JG : ¿¬»ê °á°ú°¡ 0º¸´Ù Å©¸é JUMP

JNB : Jump if not Below, ¿¬»ê °á°ú°¡ 0º¸´Ù Å©°Å³ª °°À¸¸é(ÀÛÁö ¾ÊÀ¸¸é) JUMP

JLE : Jump if less than or equal, ¿¬»ê °á°ú°¡ 0º¸´Ù À۰ųª °°À¸¸é JUMP 

----------------------------------------------------------------------------------------------------------------

Ç÷¡±× ·¹Áö½ºÅÍ¿Í Á¶°Ç Á¡ÇÁ

http://vdns.tistory.com/30

----------------------------------------------------------------------------------------------------------------

SHR %REG, VALUE : ·¹Áö½ºÅÍÀÇ °ªÀ» VALUE ºñÆ®¸¸Å­ ¿ìÃø À̵¿ÇÏ¿© ´Ù½Ã ±× ·¹Áö½ºÅÍ¿¡ ÀúÀåÇÕ´Ï´Ù.

	[»ç¿ë ¿¹Á¦]

	SHR EAX, 8 : ¸¸¾à EAX°¡ 0x12345678À̾ú´Ù¸é, ¿¬»ê ÈÄ °á°ú °ªÀº 0x00123456ÀÌ µË´Ï´Ù.
	
----------------------------------------------------------------------------------------------------------------

SHL %REG, VALUE : SHR°ú °°Áö¸¸ ¿ìÃøÀÌ ¾Æ´Ñ ÁÂÃø À̵¿ÇÕ´Ï´Ù.
	
----------------------------------------------------------------------------------------------------------------

SAR %REG, VALUE : SHR°ú °°Áö¸¸ ÃÖ»óÀ§ ºñÆ®´Â ¿øº»ÀÇ °ÍÀ¸·Î À¯Áö½Ãŵ´Ï´Ù. SARÀÇ A´Â Arithmetic(»ê¼ú)À» ÀǹÌÇÕ´Ï´Ù.

----------------------------------------------------------------------------------------------------------------

SAL %REG, VALUE : SHL°ú µ¿ÀÏÇÕ´Ï´Ù.

----------------------------------------------------------------------------------------------------------------



AND %REG, VALUE : ·¹Áö½ºÅÍÀÇ °ªÀ» VALUE·Î AND ¿¬»êÇÑ ÈÄ ´Ù½Ã ·¹Áö½ºÅÍ·Î ÀúÀåÇÕ´Ï´Ù. 

	[»ç¿ë ¿¹Á¦]

	AND EAX, 0x000000FF ; ¸¸¾à EAX°¡ 0x12345678À̾ú´Ù¸é, ¿¬»ê ÈÄ °á°ú °ªÀº 0x00000078ÀÌ µË´Ï´Ù.

	[È°¿ë ¿¹Á¦]
	4¹ÙÀÌÆ®ÀÎ EAX ·¹Áö½ºÅÍ¿¡ °¢°¢ 2¹ÙÀÌÆ®ÀÇ MAJOR ¹öÁ¯, MINOR ¹öÁ¯ Á¤º¸°¡ ÀúÀåµÇ¾î ÀÖ´Ù°í ÇÏÀÚ.
	
	»óÀ§ 2¹ÙÀÌÆ® : MAJOR ¹öÁ¯
	ÇÏÀ§ 2¹ÙÀÌÆ® : MINOR ¹öÁ¯

	ÀÌ ¶§ MINOR ¹öÁ¯¸¸ üũÇÏ°í ½Í´Ù¸é ´ÙÀ½°ú °°ÀÌ AND ¿¬»êÀ» »ç¿ëÇÑ´Ù.

	AND EAX, 0x0000FFFF
	CMP EAX, 0x5		; MINOR ¹öÁ¯ÀÌ 5ÀÎÁö üũ

	±×·³ EAX¿£ MINOR ¹öÁ¯ Á¤º¸¸¸ ³²°Ô µÈ´Ù.

	ÁÖÀÇ : MAJOR ¹öÁ¯ Á¤º¸´Â »ç¶óÁö¹Ç·Î ¹Ì¸® DATA ¿µ¿ª ¾îµò°¡¿¡ º¹»ç¸¦ Çصδ °ÍÀÌ ÁÁ´Ù.

----------------------------------------------------------------------------------------------------------------

OR %REG, VALUE : ·¹Áö½ºÅÍÀÇ °ªÀ» VALUE·Î OR ¿¬»êÇÑ ÈÄ ´Ù½Ã ·¹Áö½ºÅÍ·Î ÀúÀåÇÕ´Ï´Ù.

	[È°¿ë ¿¹Á¦]

	EAX = 0x12121212

	OR EAX, 0xFFFFFFFF 	; EAX¸¦ 0xFFFFFFFF·Î ¸¸µì´Ï´Ù.

	¿ÉÄÚµå : 83 C9 FF

	MOV EAX, 0xFFFFFFFF¿¡ ºñÇØ 2¹ÙÀÌÆ® ªÀ½

	¿ÉÄÚµå : B8 FF FF FF FF 

----------------------------------------------------------------------------------------------------------------

XOR %REG, %REG : µÎ ·¹Áö½ºÅÍ¿¡ ´ëÇØ XOR ¿¬»êÀ» ¼öÇàÇÕ´Ï´Ù.

	[»ç¿ë ¿¹Á¦]

	XOR EAX, EAX : EAX´Â °á±¹ 0ÀÌ µË´Ï´Ù. ÀÌó·³ XORÀº ·¹Áö½ºÅÍÀÇ °ªÀ» 0À¸·Î ¸¸µé ¶§ ÁÖ·Î »ç¿ëµË´Ï´Ù.

----------------------------------------------------------------------------------------------------------------

NOT %REG : ·¹Áö½ºÅÍ¿¡ NOT ¿¬»êÀ» ¼öÇàÇÕ´Ï´Ù. (1ÀÇ º¸¼ö == ¸ðµç ºñÆ®¸¦ ¹ÝÀü)

	[»ç¿ë ¿¹Á¦]

	EAX = 0x00000000

	NOT EAX		; EAX = 0xFFFFFFFF

----------------------------------------------------------------------------------------------------------------

NEG %REG : 2ÀÇ º¸¼ö ¿¬»êÀ» ¼öÇàÇÕ´Ï´Ù. (¸ðµç ºñÆ® ¹ÝÀü ÈÄ +1)

	[»ç¿ë ¿¹Á¦]

	EAX = 0x00000000

	NEG EAX		; EAX = 0x00000001

----------------------------------------------------------------------------------------------------------------

TEST %REG, %REG : µÎ ·¹Áö½ºÅÍ¿¡ ´ëÇÑ AND ¿¬»êÀ» ¼öÇàÇÏÁö¸¸, °á°ú¸¦ ´Ù½Ã ·¹Áö½ºÅÍ¿¡ ÀúÀåÇÏÁö ¾Ê°í FLAG ·¹Áö½ºÅ͸¸ ¾÷µ¥ÀÌÆ®ÇÕ´Ï´Ù.

	[»ç¿ë ¿¹Á¦]

	EAX = 1

	TEST EAX, EAX : EAX & EAX ¿¬»êÀ» ¼öÇàÇÏ°í FLAG ·¹Áö½ºÅ͸¸ ¾÷µ¥ÀÌÆ®ÇÕ´Ï´Ù. 
			·¹Áö½ºÅÍ °ªÀÇ º¯°æ ¾øÀÌ ·¹Áö½ºÅÍ°¡ 0ÀÎÁö ¾Æ´ÑÁö È®ÀÎÇÒ ¶§ ÁÖ·Î »ç¿ëµË´Ï´Ù.
			TEST ¸í·É Á÷ÈÄ¿£ º¸Åë JNZ µî°ú °°Àº ºÐ±â¹®ÀÌ ³ªÅ¸³³´Ï´Ù.
			
----------------------------------------------------------------------------------------------------------------

XCHG %REG, %REG : µÎ ·¹Áö½ºÅ͸¦ ¼­·Î ±³È¯ÇÕ´Ï´Ù.

	[»ç¿ë ¿¹Á¦]

	EAX = 10
	EBX = 20

	XCHG EAX, EBX

	°á°ú : EAX = 20 / EBX = 10
	
----------------------------------------------------------------------------------------------------------------

RETN : ÀÌÀü ÇÔ¼ö·Î º¹±ÍÇÕ´Ï´Ù. ½ºÅà ÃÖ»óÀ§ÀÇ 4¹ÙÀÌÆ®°¡ º¹±Í ÁÖ¼Ò·Î »ç¿ëµË´Ï´Ù.

----------------------------------------------------------------------------------------------------------------

CALL ADDRESS : ADDRESS ÁÖ¼ÒÀÇ ÇÔ¼ö¸¦ È£ÃâÇÕ´Ï´Ù.	
	
----------------------------------------------------------------------------------------------------------------

JNZ(== JZE) : °á°ú °ªÀÌ 0ÀÌ ¾Æ´Ï¸é(== zero-flag°¡ 0ÀÌ ¾Æ´Ï¸é) Á¡ÇÁ¸¦ ÇÕ´Ï´Ù. 
	
----------------------------------------------------------------------------------------------------------------

SCAS : Scan String
SCASB : Scan byte string
SCASW : Scan word string
SCASD : Scan double word string

	[¿ä¾à]
	- ¹®ÀÚ¿­ÀÇ ±æÀ̸¦ ±¸ÇÒ ¶§ ÁÖ·Î »ç¿ëµÇ´Â ¸í·É


	[¼³¸í]
	EAX ·¹Áö½ºÅÍÀÇ °ª°ú EDI ÁÖ¼ÒÀÇ °ªÀ» ºñ±³ÇÕ´Ï´Ù. (SCAS/SCASD - 4¹ÙÀÌÆ®, SCASB - 1¹ÙÀÌÆ®, SCASW - 2¹ÙÀÌÆ®)
	cmp ¸í·É°ú ºñ½ÁÇÏÁö¸¸, ¿¬»ê ÈÄ EDIÀÇ INDEX¸¦ Áõ°¡ ȤÀº °¨¼Ò½Ãŵ´Ï´Ù. (direction flag°¡ 0ÀÏ ¶§ Áõ°¡)

	[»ç¿ë ¿¹Á¦]

	EAX = 0x00000058 ('X')
	EDI = address of "Y(NULL)"

	SCAS BYTE PTR ES:[EDI]

	½ÇÇà °á°ú 

        Zero Flag : 0 (°°Áö ¾ÊÀ½À¸·Î)
	EDI = ±âÁ¸ EDI + 1

	[È°¿ë ¿¹Á¦]

	SCAS ¸í·ÉÀº ÁÖ·Î REPNZ (zero flag°¡ 0ÀÌ ¾Æ´Ò ¶§±îÁö ¹Ýº¹) ¸í·É°ú ÇÔ²² »ç¿ëµË´Ï´Ù.
	REPNZ Àü¿£ ECX¸¦ -1·Î ÃʱâÈ­ ½Ãŵ´Ï´Ù. (0À¸·Î ÃʱâÈ­½ÃÅ°Áö ¾Ê´Â ÀÌÀ¯´Â NOT ¿¬»ê ½Ã +1 ÈÄ ºÎÈ£º¯È¯ÀÌ µÇ±â ¶§¹®ÀÔ´Ï´Ù)

	EAX = 0x00000058 ('X')
	EDI = address of "YOU ARE A X MAN(NULL)"
	ECX = 0xFFFFFFFF (-1)
	 
	REPNZ SCAS BYTE PTR ES:[EDI]

	½ÇÇà °á°ú

        Zero flag = 1
	EDI = ±âÁ¸ EDI + strlen("YOU ARE A X")
	ECX = 0xFFFFFFF4 (-12)

	X±îÁöÀÇ ±æÀÌ´Â ECX¿¡ NOT°ú DEC ¿¬»êÀ» ¼öÇàÇÏ¸é ¾òÀ» ¼ö ÀÖ½À´Ï´Ù.

	NOT ECX == 11
	DEC ECX == 10 (length of "YOU ARE A ")

	°á·Ð

	- SCAS ¸í·ÉÀ» ÀÌ¿ëÇϸé ƯÁ¤ ¹®ÀÚ±îÁöÀÇ ±æÀ̸¦ ±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù.
		- ÁÖ·Î NULL ¹®ÀÚ¸¦ ±â¹ÝÀ¸·Î ±æÀ̸¦ ±¸ÇÒ ¶§ »ç¿ë
		- EAX = 0 ; REPNZ ...
	- SCAS ¸í·ÉÀ» ÀÌ¿ëÇϸé ƯÁ¤ ¹®ÀÚ ÀÌÈÄ ¹®ÀÚ¿­ÀÇ ½ÃÀÛ ÁÖ¼Ò¸¦ ±¸ÇÒ ¼ö ÀÖ½À´Ï´Ù.
	  (ÇÏÁö¸¸ ÀϹÝÀûÀ¸·Î´Â EDI-ECX¸¦ ÇÏ¿© ¿ø·¡ EDI °ªÀ¸·Î º¹±Í½Ãŵ´Ï´Ù)

----------------------------------------------------------------------------------------------------------------

STOS (store string)
STOSB (store string byte)
STOSW (store string word)
STOSD (store string dword)

	EAX¿¡ µé¾îÀÖ´Â °ªÀ» EDI°¡ °¡¸®Å°´Â ÁÖ¼Ò·Î º¹»çÇÕ´Ï´Ù. EDI´Â º¹»çµÈ ±æÀ̸¸Å­ Áõ°¡ÇÕ´Ï´Ù.
	ÁÖ·Î REP ¸í·É°ú ÇÔ²² »ç¿ëµË´Ï´Ù. ±×¸®°í REP ¸í·ÉÀº ECX¸¸Å­ ¹Ýº¹ ¼öÇàÇÕ´Ï´Ù.


LODS (Load from String)

	ESI ÁÖ¼Ò¿¡ ÀúÀåµÈ °ªÀ» n¹ÙÀÌÆ®¸¸Å­ EAX·Î º¹»çÇÑ ÈÄ ESI¸¦ °ªÀ» n¹ÙÀÌÆ®¸¸Å­ Áõ°¡½Ãŵ´Ï´Ù.

	LODSB(byte) : n = 1
	LODSW(word) : n = 2
	LODSD(dword) or LODS : n = 4