Operandлар. Операндлар кўрсатмалар орқали маълумотларни танитишда фойдаланилади. Уч турдаги операндлар бўлиши мумкин:
Бевосита операндлар. Бу турдаги операндлар қатий белгиланган катталиклар билан ифодаланади, масалан, 0х42.
Регистор операндлар регистор қиймати билан белгиланади, масалан,
ecx.
Хотира манзиллари операндлари. Бу турдаги операндлар кўрсатилган хотира адресидаги қиймат орқали ифодаланади. Хусусий ҳолда қийматлар, регистор ва қавс ичида ѐзилган кетма-кетликлар орқали ифойдаланади, масалан, [eax].
Регисторлар. Регисторлар CPUдаги кичик ҳажмдаги маълумот сақловчи қурилмалар бўлиб, унда маълумотни ѐзиш ва сақлаш жуду тез амалга оширилади. Қуйида х86 архитектурасида мавжуд кенг тарқалган регисторлар турлари келтирилган:
1. Умумий регисторлар CPU томонидан бажарилиш давомида фойдаланилади.
Сегмент регисторлар хотира бўлимларини аниқлашда фойдаланилади.
Ҳолат байроқлари СРU ни бирор амал бажаришида қарор қабул қилиши учун керак бўлади.
Йўриқнома кўрсаткичлари кейинги бажарилиши керак бўлган йўриқномани сақлаш учун фойдаланилади.
Қуйидаги жадвалда юқорида келтирилган регистор турлари ва унга мисоллар келтирилаган:
Умумий регисторлар
|
Сегмент
|
Ҳолат
|
Йўриқнома
|
|
регисторлар
|
байроқлари
|
кўрсаткичлари
|
|
|
|
|
EAX
|
CS
|
EFLAGS
|
EIP
|
EBX
|
SS
|
|
|
ECX
|
DS
|
|
|
EDX
|
ES
|
|
|
EBP
|
FS
|
|
|
ESP
|
GS
|
|
|
ESI
|
|
|
|
|
|
|
|
х86 архитектурасида барча регисторлар 32 бит ўлчамга эга.
Ҳолат байроқлари регистор ҳолатларини кўрсатади. Ҳар бир амал бажарилишида ҳар бир байроққа 1 ѐки 0 қийматлари ўрнатилади. Қуйидаги
104
III. НАЗАРИЙ МАТЕРИАЛЛАР
ҳолат байроқлари ЗД таҳлилига жуда зарур бўлади:
ZF. Бу байроқ zero flag деб номланиб, амал нолга тенг бўлган ҳолда ўрнатилади. Акс ҳолда тозаланиб ташланади.
CF. Бу байроқ carry flag деб номланиб, амал натижасидаги қиймат кейинги қийматга қараганда жуда катта ва жуда кичик бўлган ҳолларда ўрнатилади. Акс ҳолда тозаланиб ташланади.
SF. Бу байроқ sign flag деб номланиб, амал натижаси манфий бўлганда ўнатилади. Натижа мусбат бўлганда тозаланиб ташланади.
TF. Бу байроқ trap flag деб номланиб, у дебаг қилишда фойдаланилади. х86 процессор ушбу байроқ ўрнатилган ҳолда юкланади.
Содда кўрсатмалар. Жуда кенг фойдаланиладиган кўрсатмалардан бири бу mov бўлиб, маълумотни бир жойдан бошқа бир жойга кўчиришни амалга оширади. Бошқа сўз билан айтганда бу кўрсатма хотирадан ўқиш ва ѐзиш учун фойдаланилади. Бу кўрсатманинг умумий кўриниши mov destination, source тарзида. Қуйидаги жадвалда mov билан боғлиқ бўлган кўрсатмаларга мисоллар келтирилган.
Кўрсатмалар
|
Изоҳ
|
|
|
mov eax, ebx
|
EBX қийматини EAX регисторга кўчириш.
|
|
|
mov eax, 0x42
|
EAX регисторга 0х42 қийматини кўчириш.
|
|
|
mov eax,
|
0x4037C4 хотира адресида жойлашган 4 байт маълумотни EAX
|
[0x4037C4]
|
регисторига кўчириш.
|
|
|
mov eax, [ebx]
|
EBX регистори хотира жойлашувидан 4 байт маълумотни EAX
|
|
регисторига кўчириш.
|
|
|
mov eax,
|
ebx+esi*4 тенглик натижасида жойлашган хотира манзилида жойлашган
|
[ebx+esi*4]
|
4 байт маълумотни EAX регисторга кўчириш.
|
|
|
Mov амалига ўхшаш бўлган амал lea (load effective address) бўлиб, умумий кўриниши lea destination, source шаклда бўлади. Бу кўрсаткич хотира манзилини масофадаги манзилга қўйишда фойдаланилади. Масалан, lea eax, [ebx+8] . ebx+8 қиймати жойлашган манзилни eax регисторига сақлайди.
Арифметик амаллар. х86 ассембрлаш тили кўплаб содда арифметик амалларни қўллаб қуватлайди. 1
Кўрсатмалар
|
|
Изоҳ
|
|
|
|
|
sub eax, 0x10
|
EAX регистор қийматидан 0х10 ни олиб ташлаш.
|
|
|
|
|
add eax, ebx
|
EBX қийматига EAX қийматини қўшиш ва EAX га ўзлаштириш.
|
|
|
|
|
inc edx
|
EDX регистор қийматини 1 га ошириш.
|
|
|
|
|
dec ecx
|
ECX регистор қийматини 1 га камайтириш.
|
|
|
|
|
|
|
|
|
Michael Sikorski, Andrew Honig. Practical malware analysis. 74 – с.
105
|
III. НАЗАРИЙ МАТЕРИАЛЛАР
|
|
|
mul 0x50
|
EAX регистор қиймати 0х50 га кўпайтирилади. 64 битли натижа
|
|
EDX:EAX регисторларига сақланади. 32 битли катта қисми EDX га ва
|
|
кичик 32 битли қисм EAX га сақланади.
|
|
|
div 0x75
|
EDX:EAX 64 битли регистор қийматлари 0х75 га бўлинади ва натижа
|
|
EAX га ва қолдиқ EDX га сақланади.
|
|
|
xor eax, eax
|
EAX регистор қийматини тозалаш
|
|
|
or eax, 0x7575
|
EAX регистори қийматига 0х7575 ни мантиқий қўшиш амалида қўшиш
|
|
|
shl eax, 2
|
EAX регистор қийматини 2 бит чапга силжитиш.
|
|
|
shr eax, 2
|
EAX регистор қийматини 2 бит ўнга силжитиш.
|
|
|
ror bl, 2
|
Bl регистор қийматини ўнга циклик 2 бит айлантириш.
|
|
|
rol bl, 2
|
Bl регистор қийматини чапга циклик 2 бит айлантириш.
|
|
|
nop
|
Ҳеч қандай амални бажармайди. Кейинги кўрсатмага ўтилади.
|
|
|
Стек. Асосий хотиранинг қисми, стекда функцияга тегишли бўлган ўзгарувчилар ва параметрлар сақланади. Стекда амалга ошириладиган кўрсатмалар, push, pop, call, leave, enter ва ret бўлиши мумкин.
Push кўрсаткичи стекдаги регисторни жойлашувини қуйи хотира қисмига, яъни тезроқ бажариш учун ўзгартиради.
Pop кўрсаткичи стекдаги регисторни жойлашувини юқори хотира қисмига, яъни кейинроқ бажариш учун ўзгартиради.
Call кўрсаткичи кейинги стекни чақириш учун фойдаланилади.
Leave кўрсаткичи ESP қийматини EBP га ўрнатади ва кейин EBP ни юқори хотира қисмига ўтказади, яъни, mov( ebp, esp ); pop( ebp );
Enter кўрсаткичи қуйидаги кўрсаткичлар кетма-кетлигига тенг: push ebp; mov ebp, esp.
Шартлар. Барча тилларда бўлгани каби ассембрлаш тилида ҳам шартлар мавжуд бўлиб, асосан иккита test ва cmp кўрсаткичидан кенг фойдаланилади. Test кўрсаткичи and кўрсаткичига ўхшаш бўлиб, бундан ташқари операндлар кўрсаткич томонидан ўзгартирилмайди. Test кўрсаткичи фақат байроқни ўрнатиш учун фойдаланилади. Одатда test кўрсаткичидан сўнг ZF байроғи ўрнатилади. Test кўрсаткичи бир операнд доирасида операнд қийматини NULL тенглигини текширишда фойдаланилади. Масалан, test eax,eax кўрсаткичи eax AND eax кўрсаткичига тенг бўлиб, натижага кўра ZF байроқ ўрнатилади.
Cmp кўрсаткичи иккинчи кенг фойдаланиладиган шартли белги бўлиб, вазифаси жихатидан sub кўрсаткичига тенгдир. Бу кўрсаткич ҳам операндга таъсир қилмай фақт байроқ ҳолатини ўзгартириш учун ишлатилади. Бу шарт натижасида ZF ва CF байроқлар ўрнатилиши мумкин. Қуйидаги жадвалда cmp кўрсаткичи билан боғлиқ бўлган мисоллар берилган:
106
III. НАЗАРИЙ МАТЕРИАЛЛАР
cmp dst, src
|
ZF
|
CF
|
|
|
|
dst = src
|
1
|
0
|
|
|
|
dst < src
|
0
|
1
|
|
|
|
dst > src
|
0
|
0
|
|
|
|
Сакрашлар. Келтирилган шартлар бажарилгандан сўнг бирор амални бажаришга тўғри келади. Бажарилиши керак бўлган юклашда сакраш (jump) амалга оширилади. Cакрашлар ассемблер тилида jmp кўрсаткичи орқали амалга оширилади. Бу кўрсаткичнинг умумий кўриниши қуйидагича: jmp location. Бу шартсиз ўтиш амали саналади. Ассембрлаш тилида if шарти ўтиш оператори мавжуд эмас. Шартли ўтишларни амалга оширишда ҳолат байроқларидан фойдаланилади. Бу ҳолда ҳолат байроғига қараб кейинги босқичга ўтиш ѐки сакраш амалги оширилиши бажарилади. Ассемблер тилида 30 дан ортиқ шартли ўтиш ҳолатларидан фойдаланилади. Қуйидаги жадвалда буларга мисоллар келтирилган.
Do'stlaringiz bilan baham: |