mirror of https://github.com/red-prig/fpPS4.git
This commit is contained in:
parent
d63886c189
commit
a3258b4c1a
|
@ -208,16 +208,16 @@ begin
|
||||||
rmem_map_unlock(@rmap);
|
rmem_map_unlock(@rmap);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function kern_mmap_dmem(map :vm_map_t;
|
function kern_mmap_dmem(map :vm_map_t;
|
||||||
addr :p_vm_offset_t;
|
addr :p_vm_offset_t;
|
||||||
phaddr :QWORD;
|
phaddr:QWORD;
|
||||||
vaddr :QWORD;
|
vaddr :QWORD;
|
||||||
length :QWORD;
|
length:QWORD;
|
||||||
mtype :DWORD;
|
mtype :DWORD;
|
||||||
prot :DWORD;
|
prot :DWORD;
|
||||||
align :QWORD;
|
align :QWORD;
|
||||||
flags :DWORD;
|
flags :DWORD;
|
||||||
stack_addr:Pointer):Integer;
|
anon :Pointer):Integer;
|
||||||
label
|
label
|
||||||
_fixed,
|
_fixed,
|
||||||
_rmap_insert;
|
_rmap_insert;
|
||||||
|
@ -292,7 +292,15 @@ begin
|
||||||
|
|
||||||
vm_object_reference(dmap.vobj);
|
vm_object_reference(dmap.vobj);
|
||||||
|
|
||||||
err:=vm_map_insert(map, dmap.vobj, phaddr, vaddr, v_end, prot, VM_PROT_ALL, cow, ((p_proc.p_dmem_aliasing and 3)<>0));
|
err:=vm_map_insert(map,
|
||||||
|
dmap.vobj,
|
||||||
|
phaddr,
|
||||||
|
vaddr, v_end,
|
||||||
|
prot, VM_PROT_ALL,
|
||||||
|
cow,
|
||||||
|
anon,
|
||||||
|
((p_proc.p_dmem_aliasing and 3)<>0)
|
||||||
|
);
|
||||||
|
|
||||||
if (err=0) then
|
if (err=0) then
|
||||||
begin
|
begin
|
||||||
|
@ -511,7 +519,8 @@ begin
|
||||||
|
|
||||||
td^.td_retval[0]:=addr;
|
td^.td_retval[0]:=addr;
|
||||||
|
|
||||||
Writeln('sys_mmap_dmem(','0x',HexStr(QWORD(vaddr),10),
|
Writeln('0x',HexStr(QWORD(stack_addr),10),'->',
|
||||||
|
'sys_mmap_dmem(','0x',HexStr(QWORD(vaddr),10),
|
||||||
',0x',HexStr(length,10),
|
',0x',HexStr(length,10),
|
||||||
',0x',HexStr(mtype,1),
|
',0x',HexStr(mtype,1),
|
||||||
',0x',HexStr(prot,1),
|
',0x',HexStr(prot,1),
|
||||||
|
@ -738,7 +747,7 @@ begin
|
||||||
|
|
||||||
Writeln('sys_virtual_query:',HexStr(addr),' ',flags);
|
Writeln('sys_virtual_query:',HexStr(addr),' ',flags);
|
||||||
|
|
||||||
QWORD(addr):=QWORD(addr) and $ffffffffffffc000;
|
QWORD(addr):=QWORD(addr) and QWORD($ffffffffffffc000);
|
||||||
|
|
||||||
map:=p_proc.p_vmspace;
|
map:=p_proc.p_vmspace;
|
||||||
|
|
||||||
|
@ -789,7 +798,10 @@ begin
|
||||||
|
|
||||||
vm_map_lock(map);
|
vm_map_lock(map);
|
||||||
|
|
||||||
if not vm_map_lookup_entry(map,QWORD(addr),@entry) then
|
if vm_map_lookup_entry(map,QWORD(addr),@entry) then
|
||||||
|
begin
|
||||||
|
//Writeln('found:',HexStr(addr),'->',HexStr(entry^.start,16));
|
||||||
|
end else
|
||||||
begin
|
begin
|
||||||
if ((flags and SCE_KERNEL_VQ_FIND_NEXT)<>0) then
|
if ((flags and SCE_KERNEL_VQ_FIND_NEXT)<>0) then
|
||||||
begin
|
begin
|
||||||
|
@ -898,6 +910,17 @@ begin
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
{
|
||||||
|
Writeln('[qinfo]:',#13#10' pstart:',HexStr(qinfo.pstart)
|
||||||
|
,#13#10' p__end:',HexStr(qinfo.p__end)
|
||||||
|
,#13#10' offset:',HexStr(qinfo.offset,16)
|
||||||
|
,#13#10' protec:',HexStr(qinfo.protection,2)
|
||||||
|
,#13#10' mtypes:',qinfo.memoryType
|
||||||
|
,#13#10' name :',qinfo.name
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
Result:=copyout(@qinfo,info,size);
|
Result:=copyout(@qinfo,info,size);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
|
@ -2856,7 +2856,7 @@ begin
|
||||||
|
|
||||||
vm_map_delete(map,vaddr_lo,vaddr_hi,True);
|
vm_map_delete(map,vaddr_lo,vaddr_hi,True);
|
||||||
|
|
||||||
error:=vm_map_insert(map,nil,0,vaddr_lo,vaddr_hi,VM_PROT_RW,VM_PROT_RWX,MAP_COW_NO_BUDGET,false);
|
error:=vm_map_insert(map,nil,0,vaddr_lo,vaddr_hi,VM_PROT_RW,VM_PROT_RWX,MAP_COW_NO_BUDGET,nil,false);
|
||||||
if (error<>0) then
|
if (error<>0) then
|
||||||
begin
|
begin
|
||||||
vm_map_unlock(map);
|
vm_map_unlock(map);
|
||||||
|
|
|
@ -24,6 +24,8 @@ type
|
||||||
|
|
||||||
vm_map_object=vm_object_t;
|
vm_map_object=vm_object_t;
|
||||||
|
|
||||||
|
t_entry_name=array[0..31] of AnsiChar;
|
||||||
|
|
||||||
p_vm_map_entry_t=^vm_map_entry_t;
|
p_vm_map_entry_t=^vm_map_entry_t;
|
||||||
vm_map_entry_t=^vm_map_entry;
|
vm_map_entry_t=^vm_map_entry;
|
||||||
vm_map_entry=packed record
|
vm_map_entry=packed record
|
||||||
|
@ -43,7 +45,7 @@ type
|
||||||
max_protection:vm_prot_t; // maximum protection
|
max_protection:vm_prot_t; // maximum protection
|
||||||
inheritance :vm_inherit_t; // inheritance
|
inheritance :vm_inherit_t; // inheritance
|
||||||
budget_id :shortint; // budget/ptype id
|
budget_id :shortint; // budget/ptype id
|
||||||
name :array[0..31] of Char; // entry name
|
name :t_entry_name; // entry name
|
||||||
anon_addr :Pointer; // source code address
|
anon_addr :Pointer; // source code address
|
||||||
entry_id :QWORD; // order id
|
entry_id :QWORD; // order id
|
||||||
end;
|
end;
|
||||||
|
@ -189,6 +191,7 @@ function vm_map_insert(
|
||||||
prot :vm_prot_t;
|
prot :vm_prot_t;
|
||||||
max :vm_prot_t;
|
max :vm_prot_t;
|
||||||
cow :Integer;
|
cow :Integer;
|
||||||
|
anon :Pointer;
|
||||||
alias :Boolean):Integer;
|
alias :Boolean):Integer;
|
||||||
|
|
||||||
function vm_map_findspace(map :vm_map_t;
|
function vm_map_findspace(map :vm_map_t;
|
||||||
|
@ -242,7 +245,8 @@ function vm_map_find(map :vm_map_t;
|
||||||
find_space:Integer;
|
find_space:Integer;
|
||||||
prot :vm_prot_t;
|
prot :vm_prot_t;
|
||||||
max :vm_prot_t;
|
max :vm_prot_t;
|
||||||
cow :Integer):Integer;
|
cow :Integer;
|
||||||
|
anon :Pointer):Integer;
|
||||||
|
|
||||||
procedure vm_map_simplify_entry(map:vm_map_t;entry:vm_map_entry_t);
|
procedure vm_map_simplify_entry(map:vm_map_t;entry:vm_map_entry_t);
|
||||||
|
|
||||||
|
@ -254,14 +258,16 @@ function vm_map_fixed(map :vm_map_t;
|
||||||
prot :vm_prot_t;
|
prot :vm_prot_t;
|
||||||
max :vm_prot_t;
|
max :vm_prot_t;
|
||||||
cow :Integer;
|
cow :Integer;
|
||||||
overwr :Integer):Integer;
|
overwr :Integer;
|
||||||
|
anon :Pointer):Integer;
|
||||||
|
|
||||||
function vm_map_stack(map :vm_map_t;
|
function vm_map_stack(map :vm_map_t;
|
||||||
addrbos :vm_offset_t;
|
addrbos :vm_offset_t;
|
||||||
max_ssize:vm_size_t;
|
max_ssize:vm_size_t;
|
||||||
prot :vm_prot_t;
|
prot :vm_prot_t;
|
||||||
max :vm_prot_t;
|
max :vm_prot_t;
|
||||||
cow :Integer):Integer;
|
cow :Integer;
|
||||||
|
anon :Pointer):Integer;
|
||||||
|
|
||||||
function vm_map_growstack(map:vm_map_t;addr:vm_offset_t):Integer;
|
function vm_map_growstack(map:vm_map_t;addr:vm_offset_t):Integer;
|
||||||
function vmspace_exec(minuser,maxuser:vm_offset_t):Integer;
|
function vmspace_exec(minuser,maxuser:vm_offset_t):Integer;
|
||||||
|
@ -275,7 +281,7 @@ function vm_map_remove(map:vm_map_t;start:vm_offset_t;__end:vm_offset_t):Intege
|
||||||
|
|
||||||
procedure vm_map_set_name(map:vm_map_t;start,__end:vm_offset_t;name:PChar);
|
procedure vm_map_set_name(map:vm_map_t;start,__end:vm_offset_t;name:PChar);
|
||||||
procedure vm_map_set_name_locked(map:vm_map_t;start,__end:vm_offset_t;name:PChar);
|
procedure vm_map_set_name_locked(map:vm_map_t;start,__end:vm_offset_t;name:PChar);
|
||||||
procedure vm_map_set_name_locked(map:vm_map_t;start,__end:vm_offset_t;name:PChar;i:vm_inherit_t);
|
procedure vm_map_set_info_locked(map:vm_map_t;start,__end:vm_offset_t;name:PChar;i:vm_inherit_t);
|
||||||
|
|
||||||
procedure vm_map_track_insert(map:vm_map_t;tobj:Pointer);
|
procedure vm_map_track_insert(map:vm_map_t;tobj:Pointer);
|
||||||
procedure vm_map_track_remove(map:vm_map_t;tobj:Pointer);
|
procedure vm_map_track_remove(map:vm_map_t;tobj:Pointer);
|
||||||
|
@ -406,8 +412,8 @@ begin
|
||||||
vm_map_lock(map);
|
vm_map_lock(map);
|
||||||
For i:=0 to High(pmap_mem)-1 do
|
For i:=0 to High(pmap_mem)-1 do
|
||||||
begin
|
begin
|
||||||
vm_map_insert (map, nil, 0, pmap_mem[i].__end, pmap_mem[i+1].start, 0, 0, -1, false);
|
vm_map_insert (map, nil, 0, pmap_mem[i].__end, pmap_mem[i+1].start, 0, 0, -1, nil, false);
|
||||||
vm_map_set_name_locked(map, pmap_mem[i].__end, pmap_mem[i+1].start, '#hole', VM_INHERIT_HOLE);
|
vm_map_set_info_locked(map, pmap_mem[i].__end, pmap_mem[i+1].start, '#hole', VM_INHERIT_HOLE);
|
||||||
end;
|
end;
|
||||||
vm_map_unlock(map);
|
vm_map_unlock(map);
|
||||||
end;
|
end;
|
||||||
|
@ -1004,6 +1010,7 @@ function vm_map_insert(
|
||||||
prot :vm_prot_t;
|
prot :vm_prot_t;
|
||||||
max :vm_prot_t;
|
max :vm_prot_t;
|
||||||
cow :Integer;
|
cow :Integer;
|
||||||
|
anon :Pointer;
|
||||||
alias :Boolean):Integer;
|
alias :Boolean):Integer;
|
||||||
label
|
label
|
||||||
_budget,
|
_budget,
|
||||||
|
@ -1229,6 +1236,8 @@ charged:
|
||||||
new_entry^.entry_id:=map^.entry_id;
|
new_entry^.entry_id:=map^.entry_id;
|
||||||
Inc(map^.entry_id);
|
Inc(map^.entry_id);
|
||||||
|
|
||||||
|
new_entry^.anon_addr:=anon;
|
||||||
|
|
||||||
{
|
{
|
||||||
* Insert the new entry into the list
|
* Insert the new entry into the list
|
||||||
}
|
}
|
||||||
|
@ -1390,7 +1399,8 @@ function vm_map_fixed(map :vm_map_t;
|
||||||
prot :vm_prot_t;
|
prot :vm_prot_t;
|
||||||
max :vm_prot_t;
|
max :vm_prot_t;
|
||||||
cow :Integer;
|
cow :Integer;
|
||||||
overwr :Integer):Integer;
|
overwr :Integer;
|
||||||
|
anon :Pointer):Integer;
|
||||||
var
|
var
|
||||||
__end:vm_offset_t;
|
__end:vm_offset_t;
|
||||||
begin
|
begin
|
||||||
|
@ -1401,7 +1411,7 @@ begin
|
||||||
begin
|
begin
|
||||||
vm_map_delete(map, start, __end, True);
|
vm_map_delete(map, start, __end, True);
|
||||||
end;
|
end;
|
||||||
Result:=vm_map_insert(map, vm_obj, offset, start, __end, prot, max, cow, false);
|
Result:=vm_map_insert(map, vm_obj, offset, start, __end, prot, max, cow, anon, false);
|
||||||
vm_map_unlock(map);
|
vm_map_unlock(map);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
@ -1422,7 +1432,8 @@ function vm_map_find(map :vm_map_t;
|
||||||
find_space:Integer;
|
find_space:Integer;
|
||||||
prot :vm_prot_t;
|
prot :vm_prot_t;
|
||||||
max :vm_prot_t;
|
max :vm_prot_t;
|
||||||
cow :Integer):Integer;
|
cow :Integer;
|
||||||
|
anon :Pointer):Integer;
|
||||||
label
|
label
|
||||||
again;
|
again;
|
||||||
var
|
var
|
||||||
|
@ -1479,7 +1490,7 @@ again:
|
||||||
|
|
||||||
start:=addr^;
|
start:=addr^;
|
||||||
end;
|
end;
|
||||||
Result:=vm_map_insert(map, vm_obj, offset, start, start + length, prot, max, cow, false);
|
Result:=vm_map_insert(map, vm_obj, offset, start, start + length, prot, max, cow, anon, false);
|
||||||
until not ((Result=KERN_NO_SPACE) and
|
until not ((Result=KERN_NO_SPACE) and
|
||||||
(find_space<>VMFS_NO_SPACE) and
|
(find_space<>VMFS_NO_SPACE) and
|
||||||
(find_space<>VMFS_ANY_SPACE));
|
(find_space<>VMFS_ANY_SPACE));
|
||||||
|
@ -2584,7 +2595,8 @@ function vm_map_stack(map :vm_map_t;
|
||||||
max_ssize:vm_size_t;
|
max_ssize:vm_size_t;
|
||||||
prot :vm_prot_t;
|
prot :vm_prot_t;
|
||||||
max :vm_prot_t;
|
max :vm_prot_t;
|
||||||
cow :Integer):Integer;
|
cow :Integer;
|
||||||
|
anon :Pointer):Integer;
|
||||||
var
|
var
|
||||||
new_entry, prev_entry:vm_map_entry_t;
|
new_entry, prev_entry:vm_map_entry_t;
|
||||||
bot, top:vm_offset_t;
|
bot, top:vm_offset_t;
|
||||||
|
@ -2677,7 +2689,7 @@ begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
top:=bot + init_ssize;
|
top:=bot + init_ssize;
|
||||||
rv:=vm_map_insert(map, nil, 0, bot, top, prot, max, cow, false);
|
rv:=vm_map_insert(map, nil, 0, bot, top, prot, max, cow, anon, false);
|
||||||
|
|
||||||
{ Now set the avail_ssize amount. }
|
{ Now set the avail_ssize amount. }
|
||||||
if (rv=KERN_SUCCESS) then
|
if (rv=KERN_SUCCESS) then
|
||||||
|
@ -2902,7 +2914,7 @@ begin
|
||||||
end;
|
end;
|
||||||
|
|
||||||
rv:=vm_map_insert(map, nil, 0, addr, stack_entry^.start,
|
rv:=vm_map_insert(map, nil, 0, addr, stack_entry^.start,
|
||||||
next_entry^.protection, next_entry^.max_protection, 0, false);
|
next_entry^.protection, next_entry^.max_protection, 0, next_entry^.anon_addr, false);
|
||||||
|
|
||||||
{ Adjust the available stack space by the amount we grew. }
|
{ Adjust the available stack space by the amount we grew. }
|
||||||
if (rv=KERN_SUCCESS) then
|
if (rv=KERN_SUCCESS) then
|
||||||
|
@ -3239,6 +3251,7 @@ procedure vm_map_set_name_locked(map:vm_map_t;start,__end:vm_offset_t;name:PChar
|
||||||
var
|
var
|
||||||
current:vm_map_entry_t;
|
current:vm_map_entry_t;
|
||||||
entry:vm_map_entry_t;
|
entry:vm_map_entry_t;
|
||||||
|
simpl:vm_map_entry_t;
|
||||||
begin
|
begin
|
||||||
if (start=__end) then
|
if (start=__end) then
|
||||||
begin
|
begin
|
||||||
|
@ -3258,17 +3271,36 @@ begin
|
||||||
current:=entry;
|
current:=entry;
|
||||||
while ((current<>@map^.header) and (current^.start<__end)) do
|
while ((current<>@map^.header) and (current^.start<__end)) do
|
||||||
begin
|
begin
|
||||||
|
|
||||||
|
if ((current^.eflags and MAP_ENTRY_IS_SUB_MAP)=0) then
|
||||||
|
if (current^.vm_obj<>nil) then
|
||||||
|
if (current^.vm_obj^.otype=OBJT_BLOCKPOOL) then
|
||||||
|
begin
|
||||||
|
Assert(false,'TODO');
|
||||||
|
current:=current^.next;
|
||||||
|
Continue;
|
||||||
|
end;
|
||||||
|
|
||||||
vm_map_clip_end(map,current,__end);
|
vm_map_clip_end(map,current,__end);
|
||||||
|
|
||||||
|
current^.name:=Default(t_entry_name);
|
||||||
MoveChar0(name^,current^.name,32);
|
MoveChar0(name^,current^.name,32);
|
||||||
|
|
||||||
vm_map_simplify_entry(map, current);
|
if (p_proc.p_sdk_version > $6ffffff) then
|
||||||
|
begin
|
||||||
|
simpl:=current;
|
||||||
|
end else
|
||||||
|
begin
|
||||||
|
simpl:=entry;
|
||||||
|
end;
|
||||||
|
|
||||||
|
vm_map_simplify_entry(map, simpl);
|
||||||
|
|
||||||
current:=current^.next;
|
current:=current^.next;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
procedure vm_map_set_name_locked(map:vm_map_t;start,__end:vm_offset_t;name:PChar;i:vm_inherit_t);
|
procedure vm_map_set_info_locked(map:vm_map_t;start,__end:vm_offset_t;name:PChar;i:vm_inherit_t);
|
||||||
var
|
var
|
||||||
current:vm_map_entry_t;
|
current:vm_map_entry_t;
|
||||||
entry:vm_map_entry_t;
|
entry:vm_map_entry_t;
|
||||||
|
@ -3293,6 +3325,7 @@ begin
|
||||||
begin
|
begin
|
||||||
vm_map_clip_end(map,current,__end);
|
vm_map_clip_end(map,current,__end);
|
||||||
|
|
||||||
|
current^.name:=Default(t_entry_name);
|
||||||
MoveChar0(name^,current^.name,32);
|
MoveChar0(name^,current^.name,32);
|
||||||
current^.inheritance:=i;
|
current^.inheritance:=i;
|
||||||
|
|
||||||
|
|
|
@ -48,7 +48,7 @@ function vm_mmap2(map :vm_map_t;
|
||||||
handle_type:objtype_t;
|
handle_type:objtype_t;
|
||||||
handle :Pointer;
|
handle :Pointer;
|
||||||
foff :vm_ooffset_t;
|
foff :vm_ooffset_t;
|
||||||
stack_addr :Pointer):Integer;
|
anon :Pointer):Integer;
|
||||||
|
|
||||||
function mirror_map (paddr,psize:QWORD):Pointer;
|
function mirror_map (paddr,psize:QWORD):Pointer;
|
||||||
procedure mirror_unmap(base:Pointer;size:QWORD);
|
procedure mirror_unmap(base:Pointer;size:QWORD);
|
||||||
|
@ -408,7 +408,7 @@ function vm_mmap2(map :vm_map_t;
|
||||||
handle_type:objtype_t;
|
handle_type:objtype_t;
|
||||||
handle :Pointer;
|
handle :Pointer;
|
||||||
foff :vm_ooffset_t;
|
foff :vm_ooffset_t;
|
||||||
stack_addr :Pointer):Integer;
|
anon :Pointer):Integer;
|
||||||
var
|
var
|
||||||
obj:vm_object_t;
|
obj:vm_object_t;
|
||||||
docow,error,findspace,rv:Integer;
|
docow,error,findspace,rv:Integer;
|
||||||
|
@ -533,7 +533,10 @@ begin
|
||||||
|
|
||||||
if ((flags and MAP_STACK)<>0) then
|
if ((flags and MAP_STACK)<>0) then
|
||||||
begin
|
begin
|
||||||
rv:=vm_map_stack(map, addr^, size, prot, maxprot, docow or MAP_STACK_GROWS_DOWN);
|
rv:=vm_map_stack(map, addr^, size,
|
||||||
|
prot, maxprot,
|
||||||
|
docow or MAP_STACK_GROWS_DOWN,
|
||||||
|
anon);
|
||||||
end else
|
end else
|
||||||
if (fitit) then
|
if (fitit) then
|
||||||
begin
|
begin
|
||||||
|
@ -548,11 +551,17 @@ begin
|
||||||
begin
|
begin
|
||||||
findspace:=VMFS_OPTIMAL_SPACE;
|
findspace:=VMFS_OPTIMAL_SPACE;
|
||||||
end;
|
end;
|
||||||
rv:=vm_map_find(map, obj, foff, addr, size, findspace, prot, maxprot, docow);
|
rv:=vm_map_find(map, obj, foff, addr, size, findspace,
|
||||||
|
prot, maxprot,
|
||||||
|
docow,
|
||||||
|
anon);
|
||||||
end else
|
end else
|
||||||
begin
|
begin
|
||||||
rv:=vm_map_fixed(map, obj, foff, addr^, size, prot, maxprot, docow,
|
rv:=vm_map_fixed(map, obj, foff, addr^, size,
|
||||||
ord((flags and MAP_NO_OVERWRITE)=0));
|
prot, maxprot,
|
||||||
|
docow,
|
||||||
|
ord((flags and MAP_NO_OVERWRITE)=0),
|
||||||
|
anon);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
if (rv=KERN_SUCCESS) then
|
if (rv=KERN_SUCCESS) then
|
||||||
|
@ -905,7 +914,8 @@ _map:
|
||||||
vm_map_set_name_str(map,addr,size + addr,'anon:'+HexStr(QWORD(stack_addr),10));
|
vm_map_set_name_str(map,addr,size + addr,'anon:'+HexStr(QWORD(stack_addr),10));
|
||||||
end;
|
end;
|
||||||
|
|
||||||
Writeln('sys_mmap(','0x',HexStr(QWORD(vaddr),10),
|
Writeln('0x',HexStr(QWORD(stack_addr),10),'->',
|
||||||
|
'sys_mmap(','0x',HexStr(QWORD(vaddr),10),
|
||||||
',0x',HexStr(vlen,10),
|
',0x',HexStr(vlen,10),
|
||||||
',0x',HexStr(prot,1),
|
',0x',HexStr(prot,1),
|
||||||
',0x',HexStr(flags,6),
|
',0x',HexStr(flags,6),
|
||||||
|
@ -953,7 +963,12 @@ begin
|
||||||
Exit(EINVAL);
|
Exit(EINVAL);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
vm_map_remove(map, qword(addr), qword(addr) + size);
|
Result:=vm_map_remove(map, qword(addr), qword(addr) + size);
|
||||||
|
|
||||||
|
Writeln('sys_munmap(','0x',HexStr(QWORD(addr),10),
|
||||||
|
',0x',HexStr(len,10),
|
||||||
|
'):',Integer(Result)
|
||||||
|
);
|
||||||
|
|
||||||
// vm_map_remove returns nothing but KERN_SUCCESS anyway
|
// vm_map_remove returns nothing but KERN_SUCCESS anyway
|
||||||
Exit(0);
|
Exit(0);
|
||||||
|
@ -1111,6 +1126,13 @@ begin
|
||||||
__end:=round_page(vm_offset_t(addr) + len);
|
__end:=round_page(vm_offset_t(addr) + len);
|
||||||
|
|
||||||
vm_map_set_name(map,start,__end,@_name);
|
vm_map_set_name(map,start,__end,@_name);
|
||||||
|
|
||||||
|
Writeln('sys_mname(','0x',HexStr(QWORD(addr),10),
|
||||||
|
',0x',HexStr(len,10),
|
||||||
|
',',name,
|
||||||
|
')'
|
||||||
|
);
|
||||||
|
|
||||||
end;
|
end;
|
||||||
|
|
||||||
function sys_query_memory_protection(addr:Pointer;info:Pointer):Integer;
|
function sys_query_memory_protection(addr:Pointer;info:Pointer):Integer;
|
||||||
|
|
Loading…
Reference in New Issue