Вот такая вот проблема, кто считает себя профи, обясните плиз, неправому в чем он не прав: Код (Text): 22:50 Sergius: конкретний случай 22:50 Sergius: перед call dword [edi+DAT.in_ll] 22:51 Sergius: EDI - 230000 22:51 Sergius: DAT.in_ll - 2f01e15 22:52 MSoft: ну, в твоем коде ты прыгнешь на 2f01e15 22:54 Sergius: ноуп, в мойому коді я пригну на [edi+DAT.in_ll] - тоесть на 2f01e15+230000 22:54 Sergius: аце *** зна де 22:54 MSoft: в честь чего??? 22:51 Sergius: EDI - 230000 22:51 Sergius: DAT.in_ll - 2f01e15 22:55 MSoft: ты прыгнешь на адрес, который хранится в DAT.in_ll 22:55 MSoft: только с учетом дельты 22:55 Sergius: call dword [edi+DAT.in_ll] 22:55 MSoft: т.е. просто на 2f01e15 22:55 Sergius: яка учета дельти.... 22:55 MSoft: в EDI у тебя дельта-смещение! 22:55 Sergius: call dword [edi+DAT.in_ll] - ти реально дуплиш шо цей код робить ? 22:56 MSoft: ***, он вызывает функцию, которая хранится в DAT.in_ll. Если в этой переменной лежит 2f01e15, то туда и будет прыжок! 22:56 MSoft: или ты новый ассемблер придумал? 22:56 Sergius: ой ***...ну ти й кодер....:) я в **** 22:57 MSoft: сам ты кодер такой 22:57 MSoft: я вперые слышу, чтобы вот так на лету прибавляли к регистру число и прыгали 22:57 Sergius: слухай, зара раді експеримента я запостю в беггінерс на васмі цей код, ти не протів ? 22:57 MSoft: давай 22:57 MSoft: я только за! 22:58 Sergius: точніше не код, а наш с тобою розговор :) 22:58 MSoft: если я не прав, форматну винт и уйду в монахи! 22:58 MSoft: тогда лучше в юмор! 22:58 Sergius: ***....готов монахи Р.S. Публикуется с согласия MSoft`а
жжоте ребята. книгу читать ))) вызов буит по одресу, который лежит в дворде, который по одресу 2f01e15+230000, есле 2f01e15 - это смещение DAT.in_ll посмотреть под отладчегом слабо. з.ы. для этого не надо быть гуру з.ы.ы. действительно смахивоет на то что еди - дельта, относительно которой идет вызов процедуры, адрес которой лежит в DAT.in_ll
ееее, так и быть, даю пояснение Код (Text): DATS struc in_lib db 120 dup(0) in_proc db 10 dup(0) in_ret dd 0 in_ll dd 0 in_gpa dd 0 ends inject: dat DATS ? push eax pusha call delta delta: pop edi sub edi,$-inject-1 ;lea eax, push edi call dword [edi+DAT.in_ll]
trash_master Код будет какраз тот про что тебе толковали. call dword [edi+401000], где 401000 это и есть адрес поля DAT.in_ll. Тоесть если edi = 0 а по адресу 401000 лежит значение 123 то call перейдет на 123. Шо неясно?