segmentation.py
引數
第一題
問題
先讓我們用一個小地址空間來轉換一些地址。這裡有一組簡單的引數和幾個不同的隨機種子。你可以轉換這些地址嗎?
segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 0
segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 1
segmentation.py -a 128 -p 512 -b 0 -l 20 -B 512 -L 20 -s 2
第一組引數:
第二組引數:
第三組引數:
附上自己的分析圖:
第二題
問題
現在,讓我們看看是否理解了這個構建的小地址空間(使用上面問題的引數)。段 0 中最高的合法虛擬地址是什麼?段 1 中最低的合法虛擬地址是什麼?在整個地址空間中,最低和最高的非法地址是什麼?最後,如何執行帶有-A 標誌的 segmentation.py 來測試你是否正確?
段0中最高的合法虛擬地址是19
段1中最低的合法虛擬地址是108
在整個地址空間中,最低的非法地址是20,最高的非法地址是107
在整個地址空間中,最低的法合地址是0,最高的合法地址是127
第三題
問題
假設我們在一個 128 位元組的實體記憶體中有一個很小的 16 位元組地址空間。你會設定什麼樣的基址和界限,以便讓模擬器為指定的地址流生成以下轉換結果:有效,有效,違規,違反,有效,有效?假設用以下引數:
segmentation.py -a 16 -p 128
-A 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15
--b0 ? --l0 ? --b1 ? --l1 ?
按只有前兩個和最後兩個是有效的來考慮:
只有前兩個和最後兩個是有效的,所以界限為2
基址的選擇範圍很大,b0可以從0到124,b1可以從4到128
第四題
問題
假設我們想要生成一個問題,其中大約 90%的隨機生成的虛擬地址是有效的(即不產生段異常)。你應該如何配置模擬器來做到這一點?哪些引數很重要?
兩個界限暫存器的和佔有效地址空間的90%即可。而且隨機生成的虛擬地址數量要大,不然樣本太小
[whq@whq01 vm-segmentation]$ python segmentation.py -a 1k -n 100 -l 450 -L 480 -c
ARG seed 0
ARG address space size 1k
ARG phys mem size 16k
Segment register information:
Segment 0 base (grows positive) : 0x0000360b (decimal 13835)
Segment 0 limit : 450
Segment 1 base (grows negative) : 0x00003262 (decimal 12898)
Segment 1 limit : 480
Virtual Address Trace
VA 0: 0x000001ae (decimal: 430) --> VALID in SEG0: 0x000037b9 (decimal: 14265)
VA 1: 0x00000109 (decimal: 265) --> VALID in SEG0: 0x00003714 (decimal: 14100)
VA 2: 0x0000020b (decimal: 523) --> SEGMENTATION VIOLATION (SEG1)
VA 3: 0x0000019e (decimal: 414) --> VALID in SEG0: 0x000037a9 (decimal: 14249)
VA 4: 0x00000322 (decimal: 802) --> VALID in SEG1: 0x00003184 (decimal: 12676)
VA 5: 0x00000136 (decimal: 310) --> VALID in SEG0: 0x00003741 (decimal: 14145)
VA 6: 0x000001e8 (decimal: 488) --> SEGMENTATION VIOLATION (SEG0)
VA 7: 0x00000255 (decimal: 597) --> VALID in SEG1: 0x000030b7 (decimal: 12471)
VA 8: 0x000003a1 (decimal: 929) --> VALID in SEG1: 0x00003203 (decimal: 12803)
VA 9: 0x00000204 (decimal: 516) --> SEGMENTATION VIOLATION (SEG1)
VA 10: 0x00000120 (decimal: 288) --> VALID in SEG0: 0x0000372b (decimal: 14123)
VA 11: 0x00000305 (decimal: 773) --> VALID in SEG1: 0x00003167 (decimal: 12647)
VA 12: 0x00000279 (decimal: 633) --> VALID in SEG1: 0x000030db (decimal: 12507)
VA 13: 0x00000100 (decimal: 256) --> VALID in SEG0: 0x0000370b (decimal: 14091)
VA 14: 0x000003a3 (decimal: 931) --> VALID in SEG1: 0x00003205 (decimal: 12805)
VA 15: 0x000003ee (decimal: 1006) --> VALID in SEG1: 0x00003250 (decimal: 12880)
VA 16: 0x0000033d (decimal: 829) --> VALID in SEG1: 0x0000319f (decimal: 12703)
VA 17: 0x0000039b (decimal: 923) --> VALID in SEG1: 0x000031fd (decimal: 12797)
VA 18: 0x0000013d (decimal: 317) --> VALID in SEG0: 0x00003748 (decimal: 14152)
VA 19: 0x000002eb (decimal: 747) --> VALID in SEG1: 0x0000314d (decimal: 12621)
VA 20: 0x00000398 (decimal: 920) --> VALID in SEG1: 0x000031fa (decimal: 12794)
VA 21: 0x000002bc (decimal: 700) --> VALID in SEG1: 0x0000311e (decimal: 12574)
VA 22: 0x000001e3 (decimal: 483) --> SEGMENTATION VIOLATION (SEG0)
VA 23: 0x00000067 (decimal: 103) --> VALID in SEG0: 0x00003672 (decimal: 13938)
VA 24: 0x000001bc (decimal: 444) --> VALID in SEG0: 0x000037c7 (decimal: 14279)
VA 25: 0x00000271 (decimal: 625) --> VALID in SEG1: 0x000030d3 (decimal: 12499)
VA 26: 0x000003a6 (decimal: 934) --> VALID in SEG1: 0x00003208 (decimal: 12808)
VA 27: 0x000003dd (decimal: 989) --> VALID in SEG1: 0x0000323f (decimal: 12863)
VA 28: 0x000001e8 (decimal: 488) --> SEGMENTATION VIOLATION (SEG0)
VA 29: 0x00000376 (decimal: 886) --> VALID in SEG1: 0x000031d8 (decimal: 12760)
VA 30: 0x0000010a (decimal: 266) --> VALID in SEG0: 0x00003715 (decimal: 14101)
VA 31: 0x00000338 (decimal: 824) --> VALID in SEG1: 0x0000319a (decimal: 12698)
VA 32: 0x00000231 (decimal: 561) --> VALID in SEG1: 0x00003093 (decimal: 12435)
VA 33: 0x0000000e (decimal: 14) --> VALID in SEG0: 0x00003619 (decimal: 13849)
VA 34: 0x000002e0 (decimal: 736) --> VALID in SEG1: 0x00003142 (decimal: 12610)
VA 35: 0x00000198 (decimal: 408) --> VALID in SEG0: 0x000037a3 (decimal: 14243)
VA 36: 0x0000034c (decimal: 844) --> VALID in SEG1: 0x000031ae (decimal: 12718)
VA 37: 0x000002ac (decimal: 684) --> VALID in SEG1: 0x0000310e (decimal: 12558)
VA 38: 0x00000001 (decimal: 1) --> VALID in SEG0: 0x0000360c (decimal: 13836)
VA 39: 0x000001f9 (decimal: 505) --> SEGMENTATION VIOLATION (SEG0)
VA 40: 0x00000378 (decimal: 888) --> VALID in SEG1: 0x000031da (decimal: 12762)
VA 41: 0x000000f9 (decimal: 249) --> VALID in SEG0: 0x00003704 (decimal: 14084)
VA 42: 0x0000014d (decimal: 333) --> VALID in SEG0: 0x00003758 (decimal: 14168)
VA 43: 0x0000037b (decimal: 891) --> VALID in SEG1: 0x000031dd (decimal: 12765)
VA 44: 0x000000c3 (decimal: 195) --> VALID in SEG0: 0x000036ce (decimal: 14030)
VA 45: 0x00000245 (decimal: 581) --> VALID in SEG1: 0x000030a7 (decimal: 12455)
VA 46: 0x000000f4 (decimal: 244) --> VALID in SEG0: 0x000036ff (decimal: 14079)
VA 47: 0x000003de (decimal: 990) --> VALID in SEG1: 0x00003240 (decimal: 12864)
VA 48: 0x00000336 (decimal: 822) --> VALID in SEG1: 0x00003198 (decimal: 12696)
VA 49: 0x000001ca (decimal: 458) --> SEGMENTATION VIOLATION (SEG0)
VA 50: 0x00000052 (decimal: 82) --> VALID in SEG0: 0x0000365d (decimal: 13917)
VA 51: 0x00000147 (decimal: 327) --> VALID in SEG0: 0x00003752 (decimal: 14162)
VA 52: 0x00000208 (decimal: 520) --> SEGMENTATION VIOLATION (SEG1)
VA 53: 0x000003bb (decimal: 955) --> VALID in SEG1: 0x0000321d (decimal: 12829)
VA 54: 0x0000006f (decimal: 111) --> VALID in SEG0: 0x0000367a (decimal: 13946)
VA 55: 0x00000234 (decimal: 564) --> VALID in SEG1: 0x00003096 (decimal: 12438)
VA 56: 0x000002d3 (decimal: 723) --> VALID in SEG1: 0x00003135 (decimal: 12597)
VA 57: 0x00000230 (decimal: 560) --> VALID in SEG1: 0x00003092 (decimal: 12434)
VA 58: 0x00000342 (decimal: 834) --> VALID in SEG1: 0x000031a4 (decimal: 12708)
VA 59: 0x00000229 (decimal: 553) --> VALID in SEG1: 0x0000308b (decimal: 12427)
VA 60: 0x000003da (decimal: 986) --> VALID in SEG1: 0x0000323c (decimal: 12860)
VA 61: 0x00000269 (decimal: 617) --> VALID in SEG1: 0x000030cb (decimal: 12491)
VA 62: 0x00000259 (decimal: 601) --> VALID in SEG1: 0x000030bb (decimal: 12475)
VA 63: 0x000001c7 (decimal: 455) --> SEGMENTATION VIOLATION (SEG0)
VA 64: 0x00000262 (decimal: 610) --> VALID in SEG1: 0x000030c4 (decimal: 12484)
VA 65: 0x0000018a (decimal: 394) --> VALID in SEG0: 0x00003795 (decimal: 14229)
VA 66: 0x0000024d (decimal: 589) --> VALID in SEG1: 0x000030af (decimal: 12463)
VA 67: 0x00000129 (decimal: 297) --> VALID in SEG0: 0x00003734 (decimal: 14132)
VA 68: 0x000000c1 (decimal: 193) --> VALID in SEG0: 0x000036cc (decimal: 14028)
VA 69: 0x000000bf (decimal: 191) --> VALID in SEG0: 0x000036ca (decimal: 14026)
VA 70: 0x00000273 (decimal: 627) --> VALID in SEG1: 0x000030d5 (decimal: 12501)
VA 71: 0x000002a0 (decimal: 672) --> VALID in SEG1: 0x00003102 (decimal: 12546)
VA 72: 0x000001e7 (decimal: 487) --> SEGMENTATION VIOLATION (SEG0)
VA 73: 0x0000005b (decimal: 91) --> VALID in SEG0: 0x00003666 (decimal: 13926)
VA 74: 0x00000307 (decimal: 775) --> VALID in SEG1: 0x00003169 (decimal: 12649)
VA 75: 0x00000381 (decimal: 897) --> VALID in SEG1: 0x000031e3 (decimal: 12771)
VA 76: 0x000003b1 (decimal: 945) --> VALID in SEG1: 0x00003213 (decimal: 12819)
VA 77: 0x0000035e (decimal: 862) --> VALID in SEG1: 0x000031c0 (decimal: 12736)
VA 78: 0x00000397 (decimal: 919) --> VALID in SEG1: 0x000031f9 (decimal: 12793)
VA 79: 0x000003b1 (decimal: 945) --> VALID in SEG1: 0x00003213 (decimal: 12819)
VA 80: 0x00000229 (decimal: 553) --> VALID in SEG1: 0x0000308b (decimal: 12427)
VA 81: 0x00000190 (decimal: 400) --> VALID in SEG0: 0x0000379b (decimal: 14235)
VA 82: 0x000002d2 (decimal: 722) --> VALID in SEG1: 0x00003134 (decimal: 12596)
VA 83: 0x0000011a (decimal: 282) --> VALID in SEG0: 0x00003725 (decimal: 14117)
VA 84: 0x0000033f (decimal: 831) --> VALID in SEG1: 0x000031a1 (decimal: 12705)
VA 85: 0x00000365 (decimal: 869) --> VALID in SEG1: 0x000031c7 (decimal: 12743)
VA 86: 0x00000394 (decimal: 916) --> VALID in SEG1: 0x000031f6 (decimal: 12790)
VA 87: 0x0000025b (decimal: 603) --> VALID in SEG1: 0x000030bd (decimal: 12477)
VA 88: 0x000003cc (decimal: 972) --> VALID in SEG1: 0x0000322e (decimal: 12846)
VA 89: 0x00000251 (decimal: 593) --> VALID in SEG1: 0x000030b3 (decimal: 12467)
VA 90: 0x000001cd (decimal: 461) --> SEGMENTATION VIOLATION (SEG0)
VA 91: 0x000002a4 (decimal: 676) --> VALID in SEG1: 0x00003106 (decimal: 12550)
VA 92: 0x000003fc (decimal: 1020) --> VALID in SEG1: 0x0000325e (decimal: 12894)
VA 93: 0x000003aa (decimal: 938) --> VALID in SEG1: 0x0000320c (decimal: 12812)
VA 94: 0x0000032c (decimal: 812) --> VALID in SEG1: 0x0000318e (decimal: 12686)
VA 95: 0x00000054 (decimal: 84) --> VALID in SEG0: 0x0000365f (decimal: 13919)
VA 96: 0x00000273 (decimal: 627) --> VALID in SEG1: 0x000030d5 (decimal: 12501)
VA 97: 0x000001f2 (decimal: 498) --> SEGMENTATION VIOLATION (SEG0)
VA 98: 0x00000285 (decimal: 645) --> VALID in SEG1: 0x000030e7 (decimal: 12519)
VA 99: 0x00000361 (decimal: 865) --> VALID in SEG1: 0x000031c3 (decimal: 12739)
第五題
問題
你可以執行模擬器,使所有虛擬地址無效嗎?怎麼做到?
讓兩個界限均為0即可