mirror of https://github.com/red-prig/fpPS4.git
parent
368d9bc2dc
commit
50b41f48e9
|
@ -1634,7 +1634,7 @@
|
|||
<Define0 Value="DEBUG_MTX"/>
|
||||
</OtherDefines>
|
||||
<ExecuteAfter>
|
||||
<Command Value="$(ProjPath)\tools\fp_rebase\fp_rebase$(ExeExt) "$(OutputFile)" -rebase 0x30000000000 -dwarf"/>
|
||||
<Command Value="$(ProjPath)\tools\fp_rebase\fp_rebase$(ExeExt) "$(OutputFile)" -rebase 0xB0000000000 -dwarf"/>
|
||||
<ShowAllMessages Value="True"/>
|
||||
</ExecuteAfter>
|
||||
</Other>
|
||||
|
|
|
@ -144,10 +144,10 @@ begin
|
|||
begin
|
||||
Result:=dmem_map_alloc(dmap^.dmem,start,__end,len,align,mtype,start);
|
||||
{
|
||||
Writeln('dmem_map_alloc(0x',HexStr(start,10),
|
||||
',0x',HexStr(__end,10),
|
||||
',0x',HexStr(len,10),
|
||||
',0x',HexStr(align,10),
|
||||
Writeln('dmem_map_alloc(0x',HexStr(start,11),
|
||||
',0x',HexStr(__end,11),
|
||||
',0x',HexStr(len,11),
|
||||
',0x',HexStr(align,11),
|
||||
',',mtype,'):',Result);
|
||||
}
|
||||
end;
|
||||
|
|
|
@ -1935,7 +1935,7 @@ begin
|
|||
//
|
||||
if print_asm then
|
||||
begin
|
||||
Writeln('switchtable:0x',HexStr(QWORD(sw_table^.table),10),'..0x',HexStr(QWORD(sw_next),10));
|
||||
Writeln('switchtable:0x',HexStr(QWORD(sw_table^.table),11),'..0x',HexStr(QWORD(sw_next),11));
|
||||
end;
|
||||
//
|
||||
if ctx.is_text_addr(QWORD(sw_data)) and
|
||||
|
@ -1959,7 +1959,7 @@ begin
|
|||
begin
|
||||
if print_asm then
|
||||
begin
|
||||
Writeln(' [0x',HexStr(QWORD(sw_data),10),']->0x',HexStr(ofs,10));
|
||||
Writeln(' [0x',HexStr(QWORD(sw_data),11),']->0x',HexStr(ofs,11));
|
||||
end;
|
||||
//
|
||||
ctx.add_forward_point(fpCall,Pointer(ofs));
|
||||
|
|
|
@ -1916,8 +1916,9 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
// $10000000000 = 1 shl 40
|
||||
// 64-40 = 24
|
||||
// VM_MAXUSER_ADDRESS
|
||||
// $80000000000 = 1 shl 43
|
||||
// 64-43 = 21
|
||||
|
||||
procedure op_uplift(var ctx:t_jit_context2;const dst:TRegValue;mem_size:TOperandSize;hint:t_lea_hint=[]);
|
||||
var
|
||||
|
@ -1950,7 +1951,7 @@ begin
|
|||
xchgq(rcx,rbits);
|
||||
|
||||
//addres bits
|
||||
movi(new_reg_size(rcx,os8),40);
|
||||
movi(new_reg_size(rcx,os8),43);
|
||||
|
||||
shrx(rcx,dst,rcx);
|
||||
|
||||
|
@ -1967,7 +1968,7 @@ begin
|
|||
|
||||
{
|
||||
//zero bits
|
||||
movi(new_reg_size(rbits,os8),24); //mov $24,%bpl
|
||||
movi(new_reg_size(rbits,os8),21); //mov $21,%bpl
|
||||
|
||||
//clear hi
|
||||
shlx(dst,dst,rbits); //shlx %rbp,%r14,%r14
|
||||
|
|
|
@ -93,7 +93,7 @@ end;
|
|||
|
||||
function sys_netgetiflist(param1:Pointer;param2,param3:Integer):Integer;
|
||||
begin
|
||||
Writeln('TODO:sys_netgetiflist(0x',HexStr(QWORD(param1),10),',',param2,',',param3,')');
|
||||
Writeln('TODO:sys_netgetiflist(0x',HexStr(QWORD(param1),11),',',param2,',',param3,')');
|
||||
Result:=0;
|
||||
end;
|
||||
|
||||
|
|
|
@ -521,15 +521,15 @@ begin
|
|||
|
||||
td^.td_retval[0]:=addr;
|
||||
|
||||
Writeln('0x',HexStr(QWORD(stack_addr),10),'->',
|
||||
'sys_mmap_dmem(','0x',HexStr(QWORD(vaddr),10),
|
||||
',0x',HexStr(length,10),
|
||||
Writeln('0x',HexStr(QWORD(stack_addr),11),'->',
|
||||
'sys_mmap_dmem(','0x',HexStr(QWORD(vaddr),11),
|
||||
',0x',HexStr(length,11),
|
||||
',0x',HexStr(mtype,1),
|
||||
',0x',HexStr(prot,1),
|
||||
',0x',HexStr(flags,6),
|
||||
',0x',HexStr(phaddr,10),
|
||||
'):',Integer(Result),
|
||||
':0x',HexStr(addr,10),'..0x',HexStr(addr+length,10));
|
||||
':0x',HexStr(addr,11),'..0x',HexStr(addr+length,11));
|
||||
end;
|
||||
|
||||
function IN_CUSALIST_1:Boolean;
|
||||
|
|
|
@ -445,7 +445,7 @@ begin
|
|||
Writeln(' obj.id :',obj^.id);
|
||||
Writeln(' tls_flags :0x',HexStr(tls_index shr 16,4));
|
||||
Writeln(' tls_index :0x',HexStr(tls_index,4));
|
||||
Writeln(' tls_init_addr:0x',HexStr(QWORD(obj^.tls_init_addr),10));
|
||||
Writeln(' tls_init_addr:0x',HexStr(QWORD(obj^.tls_init_addr),11));
|
||||
Writeln(' tls_init_size:0x',HexStr(obj^.tls_init_size,8));
|
||||
Writeln(' tls_size :0x',HexStr(obj^.tls_size ,8));
|
||||
Writeln(' tls_offset :0x',HexStr(obj^.tls_offset ,8));
|
||||
|
|
|
@ -397,7 +397,7 @@ begin
|
|||
|
||||
stack_addr:=QWORD(vmspace^.sv_usrstack) - ssiz;
|
||||
|
||||
Writeln('vm_map_stack:0x',HexStr(stack_addr,10),'..0x',HexStr(stack_addr+ssiz,10));
|
||||
Writeln('vm_map_stack:0x',HexStr(stack_addr,11),'..0x',HexStr(stack_addr+ssiz,11));
|
||||
|
||||
error:=vm_map_stack(map,
|
||||
stack_addr,ssiz,
|
||||
|
|
|
@ -133,7 +133,7 @@ begin
|
|||
|
||||
td^.td_retval[0]:=key;
|
||||
|
||||
Writeln('namedobj_create("',_name,'",0x',HexStr(QWORD(objp),10),',0x',HexStr(objt,4),'):',key);
|
||||
Writeln('namedobj_create("',_name,'",0x',HexStr(QWORD(objp),11),',0x',HexStr(objt,4),'):',key);
|
||||
|
||||
Result:=0;
|
||||
end;
|
||||
|
|
|
@ -171,12 +171,12 @@ begin
|
|||
{
|
||||
Writeln('ranges_overlap:',
|
||||
HexStr(entry),',',
|
||||
HexStr(entry^.rl_q_start,10),',',
|
||||
HexStr(entry^.rl_q_end,10),
|
||||
HexStr(entry^.rl_q_start,11),',',
|
||||
HexStr(entry^.rl_q_end,11),
|
||||
' to ',
|
||||
HexStr(entry1),',',
|
||||
HexStr(entry1^.rl_q_start,10),',',
|
||||
HexStr(entry1^.rl_q_end,10));
|
||||
HexStr(entry1^.rl_q_start,11),',',
|
||||
HexStr(entry1^.rl_q_end,11));
|
||||
}
|
||||
goto _out;
|
||||
end;
|
||||
|
|
|
@ -298,7 +298,7 @@ begin
|
|||
begin
|
||||
if ((ppmap_get_prot(get_pageflt_addr(p),instr.mema_size) and VM_PROT_WRITE)<>0) then
|
||||
begin
|
||||
//Writeln('TRACK_WRITE:',HexStr(get_pageflt_addr(p),10));
|
||||
//Writeln('TRACK_WRITE:',HexStr(get_pageflt_addr(p),11));
|
||||
|
||||
//trigger and restore
|
||||
vm_map_track_trigger(p_proc.p_vmspace,
|
||||
|
|
|
@ -346,11 +346,11 @@ begin
|
|||
|
||||
if (PAGE_PROT=nil) then
|
||||
begin
|
||||
r:=md_mmap(PAGE_PROT,PAGE_MAP_COUNT,VM_RW);
|
||||
r:=md_mmap(PAGE_PROT,PAGE_MAP_COUNT_SZ1,VM_RW);
|
||||
|
||||
if (r<>0) then
|
||||
begin
|
||||
Writeln('failed md_mmap(',HexStr(PAGE_MAP_COUNT,11),'):0x',HexStr(r,8));
|
||||
Writeln('failed md_mmap(',HexStr(PAGE_MAP_COUNT_SZ1,11),'):0x',HexStr(r,8));
|
||||
Assert(false,'pmap_pinit');
|
||||
end;
|
||||
end;
|
||||
|
@ -733,7 +733,7 @@ function pmap_wlock(pmap :pmap_t;
|
|||
start:vm_offset_t;
|
||||
__end:vm_offset_t):Pointer; inline;
|
||||
begin
|
||||
//Writeln('pmap_wlock:',HexStr(start,10),'..',HexStr(__end,10));
|
||||
//Writeln('pmap_wlock:',HexStr(start,11),'..',HexStr(__end,11));
|
||||
|
||||
Result:=vm_map_lock_range(pmap^.vm_map,start,__end,RL_LOCK_WRITE);
|
||||
end;
|
||||
|
@ -742,14 +742,14 @@ function pmap_rlock(pmap :pmap_t;
|
|||
start:vm_offset_t;
|
||||
__end:vm_offset_t):Pointer; inline;
|
||||
begin
|
||||
//Writeln('pmap_rlock:',HexStr(start,10),'..',HexStr(__end,10));
|
||||
//Writeln('pmap_rlock:',HexStr(start,11),'..',HexStr(__end,11));
|
||||
|
||||
Result:=vm_map_lock_range(pmap^.vm_map,start,__end,RL_LOCK_READ);
|
||||
end;
|
||||
|
||||
procedure pmap_unlock(pmap:pmap_t;cookie:Pointer); inline;
|
||||
begin
|
||||
//Writeln('pmap_unlock:',HexStr(p_rl_q_entry(cookie)^.rl_q_start,10),'..',HexStr(p_rl_q_entry(cookie)^.rl_q_end,10));
|
||||
//Writeln('pmap_unlock:',HexStr(p_rl_q_entry(cookie)^.rl_q_start,11),'..',HexStr(p_rl_q_entry(cookie)^.rl_q_end,11));
|
||||
|
||||
vm_map_unlock_range(pmap^.vm_map,cookie);
|
||||
end;
|
||||
|
@ -1673,7 +1673,7 @@ begin
|
|||
|
||||
lock:=pmap_wlock(pmap,start,__end);
|
||||
|
||||
ppmap_unmark(start,__end);
|
||||
ppmap_unmark(start,__end,VM_PROT_ALL);
|
||||
|
||||
vm_track_map_remove_memory(@pmap^.tr_map,start,__end);
|
||||
|
||||
|
|
|
@ -16,8 +16,14 @@ const
|
|||
PMAPP_SIZE =MD_PAGE_SIZE; //1 shl PMAPP_SHIFT; //4*1024
|
||||
PMAPP_MASK =MD_PAGE_MASK; //PMAPP_SIZE-1;
|
||||
|
||||
PAGE_MAP_COUNT =(QWORD(VM_MAXUSER_ADDRESS) shr PMAPP_SHIFT);
|
||||
PAGE_MAP_MASK =PAGE_MAP_COUNT-1;
|
||||
PAGE_MAP_COUNT_ALL=(QWORD(VM_MAXUSER_ADDRESS) shr PMAPP_SHIFT);
|
||||
PAGE_MAP_MASK_ALL =PAGE_MAP_COUNT_ALL-1;
|
||||
|
||||
PAGE_MAP_COUNT_LV1=PAGE_MAP_COUNT_ALL shr 16;
|
||||
PAGE_MAP_COUNT_LV2=1 shl 16; //64KB
|
||||
|
||||
PAGE_MAP_COUNT_SZ1=PAGE_MAP_COUNT_LV1*SizeOf(Pointer);
|
||||
PAGE_MAP_COUNT_SZ2=PAGE_MAP_COUNT_LV2*SizeOf(Byte);
|
||||
|
||||
PAGE_PROT_READ =VM_PROT_READ;
|
||||
PAGE_PROT_WRITE =VM_PROT_WRITE;
|
||||
|
@ -36,11 +42,10 @@ const
|
|||
REMAP_PROT=2; //Ignore protect bit checking
|
||||
|
||||
var
|
||||
PAGE_PROT:PBYTE=nil;
|
||||
PAGE_PROT:PPBYTE=nil;
|
||||
|
||||
procedure ppmap_mark_rwx (start,__end:vm_offset_t;prots:Byte);
|
||||
procedure ppmap_unmark (start,__end:vm_offset_t);
|
||||
procedure ppmap_unmark_rwx(start,__end:vm_offset_t);
|
||||
procedure ppmap_unmark (start,__end:vm_offset_t;prots:Byte);
|
||||
procedure ppmap_track (start,__end:vm_offset_t;prots:Byte);
|
||||
//procedure ppmap_untrack (start,__end:vm_offset_t;prots:Byte);
|
||||
function ppmap_scan (start,__end:vm_offset_t):vm_offset_t;
|
||||
|
@ -64,14 +69,54 @@ end;
|
|||
|
||||
function MAX_IDX(x:DWORD):DWORD; inline;
|
||||
begin
|
||||
if (x>PAGE_MAP_MASK) then
|
||||
Result:=PAGE_MAP_MASK
|
||||
if (x>PAGE_MAP_MASK_ALL) then
|
||||
Result:=PAGE_MAP_MASK_ALL
|
||||
else
|
||||
Result:=x;
|
||||
end;
|
||||
|
||||
function LV1_IDX(x:DWORD):DWORD; inline;
|
||||
begin
|
||||
Result:=x shr 16;
|
||||
end;
|
||||
|
||||
function LV2_IDX(x:DWORD):DWORD; inline;
|
||||
begin
|
||||
Result:=x and (PAGE_MAP_COUNT_LV2-1);
|
||||
end;
|
||||
|
||||
procedure prealloc(i:DWORD);
|
||||
var
|
||||
ptr:Pointer;
|
||||
r:Integer;
|
||||
begin
|
||||
repeat
|
||||
|
||||
if (PAGE_PROT[LV1_IDX(i)]=nil) then
|
||||
begin
|
||||
|
||||
ptr:=nil;
|
||||
r:=md_mmap(ptr,PAGE_MAP_COUNT_SZ2,VM_RW);
|
||||
Assert((r=0),'prealloc');
|
||||
|
||||
if (System.InterlockedCompareExchange(PAGE_PROT[LV1_IDX(i)],ptr,nil)=nil) then
|
||||
begin
|
||||
Exit;
|
||||
end;
|
||||
|
||||
md_unmap(ptr,PAGE_MAP_COUNT_SZ2);
|
||||
|
||||
end else
|
||||
begin
|
||||
Exit;
|
||||
end;
|
||||
|
||||
until false;
|
||||
end;
|
||||
|
||||
procedure ppmap_mark_rwx(start,__end:vm_offset_t;prots:Byte);
|
||||
var
|
||||
P:PByte;
|
||||
clear:Byte;
|
||||
begin
|
||||
prots:=prots and PAGE_PROT_RWX;
|
||||
|
@ -82,15 +127,18 @@ begin
|
|||
__end:=MAX_IDX(__end);
|
||||
while (start<__end) do
|
||||
begin
|
||||
atomic_clear_byte(@PAGE_PROT[start],clear);
|
||||
atomic_set_byte (@PAGE_PROT[start],prots);
|
||||
//PAGE_PROT[start]:=prots;
|
||||
//
|
||||
prealloc(start);
|
||||
//
|
||||
P:=@PAGE_PROT[LV1_IDX(start)][LV2_IDX(start)];
|
||||
atomic_clear_byte(P,clear);
|
||||
atomic_set_byte (P,prots);
|
||||
Inc(start);
|
||||
end;
|
||||
WriteBarrier;
|
||||
end;
|
||||
|
||||
procedure ppmap_unmark(start,__end:vm_offset_t);
|
||||
procedure ppmap_unmark(start,__end:vm_offset_t;prots:Byte);
|
||||
begin
|
||||
start:=OFF_TO_IDX(start);
|
||||
__end:=OFF_TO_IDX(__end);
|
||||
|
@ -98,21 +146,10 @@ begin
|
|||
__end:=MAX_IDX(__end);
|
||||
while (start<__end) do
|
||||
begin
|
||||
//PAGE_PROT[start]:=0;
|
||||
Inc(start);
|
||||
end;
|
||||
WriteBarrier;
|
||||
end;
|
||||
|
||||
procedure ppmap_unmark_rwx(start,__end:vm_offset_t);
|
||||
begin
|
||||
start:=OFF_TO_IDX(start);
|
||||
__end:=OFF_TO_IDX(__end);
|
||||
start:=MAX_IDX(start);
|
||||
__end:=MAX_IDX(__end);
|
||||
while (start<__end) do
|
||||
begin
|
||||
atomic_clear_byte(@PAGE_PROT[start],PAGE_PROT_RWX);
|
||||
if (PAGE_PROT[LV1_IDX(start)]<>nil) then
|
||||
begin
|
||||
atomic_clear_byte(@PAGE_PROT[LV1_IDX(start)][LV2_IDX(start)],prots);
|
||||
end;
|
||||
Inc(start);
|
||||
end;
|
||||
WriteBarrier;
|
||||
|
@ -120,6 +157,7 @@ end;
|
|||
|
||||
procedure ppmap_track(start,__end:vm_offset_t;prots:Byte);
|
||||
var
|
||||
P:PByte;
|
||||
s_prots:Byte;
|
||||
c_prots:Byte;
|
||||
begin
|
||||
|
@ -132,8 +170,12 @@ begin
|
|||
__end:=MAX_IDX(__end);
|
||||
while (start<__end) do
|
||||
begin
|
||||
atomic_set_byte (@PAGE_PROT[start],s_prots);
|
||||
atomic_clear_byte(@PAGE_PROT[start],c_prots);
|
||||
//
|
||||
prealloc(start);
|
||||
//
|
||||
P:=@PAGE_PROT[LV1_IDX(start)][LV2_IDX(start)];
|
||||
atomic_set_byte (P,s_prots);
|
||||
atomic_clear_byte(P,c_prots);
|
||||
Inc(start);
|
||||
end;
|
||||
WriteBarrier;
|
||||
|
@ -156,6 +198,21 @@ begin
|
|||
end;
|
||||
}
|
||||
|
||||
function _get_prot(addr:DWORD):Byte; inline;
|
||||
begin
|
||||
if (addr>PAGE_MAP_MASK_ALL) then
|
||||
begin
|
||||
Result:=0
|
||||
end else
|
||||
if (PAGE_PROT[LV1_IDX(addr)]=nil) then
|
||||
begin
|
||||
Result:=0
|
||||
end else
|
||||
begin
|
||||
Result:=PAGE_PROT[LV1_IDX(addr)][LV2_IDX(addr)];
|
||||
end;
|
||||
end;
|
||||
|
||||
function ppmap_scan(start,__end:vm_offset_t):vm_offset_t;
|
||||
var
|
||||
b,v:Byte;
|
||||
|
@ -167,12 +224,12 @@ begin
|
|||
|
||||
ReadBarrier;
|
||||
|
||||
b:=PAGE_PROT[start];
|
||||
b:=_get_prot(start);
|
||||
Inc(start);
|
||||
|
||||
while (start<__end) do
|
||||
begin
|
||||
v:=PAGE_PROT[start];
|
||||
v:=_get_prot(start);
|
||||
|
||||
if (b<>v) then
|
||||
begin
|
||||
|
@ -199,12 +256,12 @@ begin
|
|||
|
||||
ReadBarrier;
|
||||
|
||||
b:=(PAGE_PROT[start] and PAGE_PROT_RWX);
|
||||
b:=(_get_prot(start) and PAGE_PROT_RWX);
|
||||
Inc(start);
|
||||
|
||||
while (start<__end) do
|
||||
begin
|
||||
v:=(PAGE_PROT[start] and PAGE_PROT_RWX);
|
||||
v:=(_get_prot(start) and PAGE_PROT_RWX);
|
||||
|
||||
if (b<>v) then
|
||||
begin
|
||||
|
@ -222,14 +279,7 @@ end;
|
|||
|
||||
function ppmap_get_prot(addr:vm_offset_t):Byte;
|
||||
begin
|
||||
addr:=OFF_TO_IDX(addr);
|
||||
if (addr>PAGE_MAP_MASK) then
|
||||
begin
|
||||
Result:=0
|
||||
end else
|
||||
begin
|
||||
Result:=PAGE_PROT[addr];
|
||||
end;
|
||||
Result:=_get_prot(OFF_TO_IDX(addr));
|
||||
end;
|
||||
|
||||
function ppmap_get_prot(addr,size:vm_offset_t):Byte;
|
||||
|
|
|
@ -2815,7 +2815,7 @@ begin
|
|||
|
||||
entry^.eflags:=entry^.eflags or MAP_ENTRY_IN_TRANSITION;
|
||||
|
||||
//Writeln('+MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,10),'..',HexStr(entry^.__end,10));
|
||||
//Writeln('+MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,11),'..',HexStr(entry^.__end,11));
|
||||
|
||||
//entry^.wiring_thread:=curthread;
|
||||
|
||||
|
@ -2916,7 +2916,7 @@ _done:
|
|||
entry^.eflags:=entry^.eflags and (not MAP_ENTRY_IN_TRANSITION);
|
||||
//entry^.wiring_thread:=nil;
|
||||
|
||||
//Writeln('-MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,10),'..',HexStr(entry^.__end,10));
|
||||
//Writeln('-MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,11),'..',HexStr(entry^.__end,11));
|
||||
|
||||
if (entry^.eflags and MAP_ENTRY_NEEDS_WAKEUP)<>0 then
|
||||
begin
|
||||
|
@ -3084,7 +3084,7 @@ begin
|
|||
entry^.eflags:=entry^.eflags or MAP_ENTRY_IN_TRANSITION;
|
||||
//entry^.wiring_thread:=curthread;
|
||||
|
||||
//Writeln('+MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,10),'..',HexStr(entry^.__end,10));
|
||||
//Writeln('+MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,11),'..',HexStr(entry^.__end,11));
|
||||
|
||||
if ((entry^.protection and VM_PROT_ALL)=0)
|
||||
or ((entry^.protection and prot)<>prot) then
|
||||
|
@ -3331,7 +3331,7 @@ _next_entry_done:
|
|||
entry^.eflags:=entry^.eflags and (not (MAP_ENTRY_IN_TRANSITION or MAP_ENTRY_WIRE_SKIPPED));
|
||||
//entry^.wiring_thread:=nil;
|
||||
|
||||
//Writeln('-MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,10),'..',HexStr(entry^.__end,10));
|
||||
//Writeln('-MAP_ENTRY_IN_TRANSITION:0x',HexStr(entry^.start,11),'..',HexStr(entry^.__end,11));
|
||||
|
||||
if ((entry^.eflags and MAP_ENTRY_NEEDS_WAKEUP)<>0) then
|
||||
begin
|
||||
|
|
|
@ -961,18 +961,18 @@ _map:
|
|||
if (stack_addr<>nil) then
|
||||
begin
|
||||
//Do you really need it?
|
||||
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),11));
|
||||
end;
|
||||
|
||||
Writeln('0x',HexStr(QWORD(stack_addr),10),'->',
|
||||
'sys_mmap(','0x',HexStr(QWORD(vaddr),10),
|
||||
',0x',HexStr(vlen,10),
|
||||
Writeln('0x',HexStr(QWORD(stack_addr),11),'->',
|
||||
'sys_mmap(','0x',HexStr(QWORD(vaddr),11),
|
||||
',0x',HexStr(vlen,11),
|
||||
',0x',HexStr(prot,1),
|
||||
',0x',HexStr(flags,6),
|
||||
',',fd,
|
||||
',0x',HexStr(pos,10),
|
||||
',0x',HexStr(pos,11),
|
||||
'):',Integer(Result),
|
||||
':0x',HexStr(td^.td_retval[0],10),'..0x',HexStr(td^.td_retval[0]+size,10));
|
||||
':0x',HexStr(td^.td_retval[0],11),'..0x',HexStr(td^.td_retval[0]+size,11));
|
||||
|
||||
|
||||
_done:
|
||||
|
@ -1015,8 +1015,8 @@ begin
|
|||
|
||||
Result:=vm_map_remove(map, qword(addr), qword(addr) + size);
|
||||
|
||||
Writeln('sys_munmap(','0x',HexStr(QWORD(addr),10),
|
||||
',0x',HexStr(len,10),
|
||||
Writeln('sys_munmap(','0x',HexStr(QWORD(addr),11),
|
||||
',0x',HexStr(len,11),
|
||||
'):',Integer(Result)
|
||||
);
|
||||
|
||||
|
@ -1216,8 +1216,8 @@ begin
|
|||
|
||||
vm_map_set_name(map,start,__end,@_name);
|
||||
|
||||
Writeln('sys_mname(','0x',HexStr(QWORD(addr),10),
|
||||
',0x',HexStr(len,10),
|
||||
Writeln('sys_mname(','0x',HexStr(QWORD(addr),11),
|
||||
',0x',HexStr(len,11),
|
||||
',','"',name,'"',
|
||||
')'
|
||||
);
|
||||
|
|
|
@ -43,9 +43,6 @@ const
|
|||
_PROC_AREA_START_1 =QWORD($00010000000); //(original:0x400000-0x80000000)
|
||||
_PROC_AREA___END =QWORD($00070000000);
|
||||
|
||||
WIN_MAX_MOVED_STACK =QWORD($40000000000);
|
||||
WIN_SHARED_ADDR =QWORD($40000000000);
|
||||
|
||||
SCE_REPLAY_EXEC_START=QWORD($00fc0000000);
|
||||
|
||||
DL_AREA_START =QWORD($00080000000); //(original:0x80000000-0x200000000)
|
||||
|
@ -62,13 +59,18 @@ const
|
|||
SCE_KERNEL_GNMDRIVER =QWORD($00FE0000000);
|
||||
|
||||
_VM_MINUSER_ADDRESS =QWORD($00010000000); //(original:$000000000000)
|
||||
VM_MAXUSER_ADDRESS =QWORD($10000000000); //(original:$800000000000) MAP_AREA_END=0xfc00000000
|
||||
VM_MAXUSER_ADDRESS =QWORD($80000000000); //(original:$800000000000) MAP_AREA_END=0xfc00000000
|
||||
|
||||
VM_MIN_GPU_ADDRESS =QWORD($10000000000);
|
||||
VM_MAX_GPU_ADDRESS =QWORD($20000000000); //Virtual mirror
|
||||
VM_MIN_GPU_ADDRESS =QWORD($90000000000);
|
||||
VM_MAX_GPU_ADDRESS =QWORD($A0000000000); //Virtual mirror
|
||||
|
||||
VM_MIN_DEV_ADDRESS =QWORD($20000000000);
|
||||
VM_MAX_DEV_ADDRESS =QWORD($20000010000); //64KB
|
||||
VM_MIN_DEV_ADDRESS =QWORD($A0000000000);
|
||||
VM_MAX_DEV_ADDRESS =QWORD($A0000010000); //64KB
|
||||
|
||||
WIN_REBASE_ADDR =QWORD($B0000000000); //fp_rebase
|
||||
|
||||
WIN_MAX_MOVED_STACK =QWORD($C0000000000);
|
||||
WIN_SHARED_ADDR =QWORD($C0000000000);
|
||||
|
||||
VM_DMEM_SIZE =$180000000; // 6144MB
|
||||
|
||||
|
|
Loading…
Reference in New Issue