StarmanX32
Member
So I've been working on Vertex lately, testing TMAPI on it. The progress so far looks like that:
In Vertex, I've added the capability that plugins can bring their own config UI through an abstraction in the API.
So far, initialization, connection and get process list function work. Attachment initially "crashed" (that's because I forgot to use SNPS3ProcessContinue after SNPS3ProcessAttach... duh)
Anyways, for that, I've had to create a thread management system inside Vertex which distinguishes between "Multithread Mode" and "Singlethread Mode" Plugins. The TMAPI plugin is a single thread mode plugin which means Vertex will route all plugin calls onto a dedicated thread (which kills performance specifically in the scanner), that's because SNPS3InitTargetComms which is used to initialize TMAPI uses TLS data and calling any other TMAPI functions from other threads will cause immediate failure.
The threading system still needs some testing and there are some bugs unfortunately, but I'll hope I can get them fixed very soon.
The next step is testing memory querying through SNPS3GetVirtualMemoryInfo and potentially add a filter (which I presume sits at uOptions in the SNPS3VirtualMemoryArea struct) which helps the memory scanner filter out unnecessary regions/areas during scanning.
After that step, I'll see in the debugger view to fully integrate TMAPI including Disassembly View, which worked quite well for Windows x86, am excited for PPC this time!
It's tedious work, but I'll eventually get some good results from the PS3, I gotta mention though that PC is still the first class citizen for me
Some questions which I have left for the developers.
Regarding the minimum and maximum address of a process, what would be the best way to figure it out?
My approach was to parse 0x10000 as an ELF header and use the entry variable as the minimum address since PS3 doesn't have ASLR iirc and I **assume** there's nothing special going on the system that makes it undeterministic.
What about the maximum address though?
In Vertex, I've added the capability that plugins can bring their own config UI through an abstraction in the API.
So far, initialization, connection and get process list function work. Attachment initially "crashed" (that's because I forgot to use SNPS3ProcessContinue after SNPS3ProcessAttach... duh)
Anyways, for that, I've had to create a thread management system inside Vertex which distinguishes between "Multithread Mode" and "Singlethread Mode" Plugins. The TMAPI plugin is a single thread mode plugin which means Vertex will route all plugin calls onto a dedicated thread (which kills performance specifically in the scanner), that's because SNPS3InitTargetComms which is used to initialize TMAPI uses TLS data and calling any other TMAPI functions from other threads will cause immediate failure.
The threading system still needs some testing and there are some bugs unfortunately, but I'll hope I can get them fixed very soon.
The next step is testing memory querying through SNPS3GetVirtualMemoryInfo and potentially add a filter (which I presume sits at uOptions in the SNPS3VirtualMemoryArea struct) which helps the memory scanner filter out unnecessary regions/areas during scanning.
After that step, I'll see in the debugger view to fully integrate TMAPI including Disassembly View, which worked quite well for Windows x86, am excited for PPC this time!
It's tedious work, but I'll eventually get some good results from the PS3, I gotta mention though that PC is still the first class citizen for me
Some questions which I have left for the developers.
Regarding the minimum and maximum address of a process, what would be the best way to figure it out?
My approach was to parse 0x10000 as an ELF header and use the entry variable as the minimum address since PS3 doesn't have ASLR iirc and I **assume** there's nothing special going on the system that makes it undeterministic.
What about the maximum address though?