 |
forums.ps2dev.org Homebrew PS2, PSP & PS3 Development Discussions
|
| View previous topic :: View next topic |
| Author |
Message |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Thu Jan 18, 2007 7:10 pm Post subject: WPA support in kernel mode apps for 3.03oe |
|
|
I'm trying to build a version of PMP VLC for firmware 3.03oe with support for Wlan WPA connections.
I looked at psp vnc 1.2.2b sourcecode. The changes in itself are rather simple, but there is an issue: psp vnc defines DEVHOOK in the makefile and therefore builds a usermode app:
| Code: | #ifdef DEVHOOK
PSP_MODULE_INFO("PSPVNC", 0, 1, 1);
#else
PSP_MODULE_INFO("PSPVNC", 0x1000, 1, 1);
#endif |
Since PMP VLC uses the ME it has to be a kernelmode app. Is there a way to build a kernelmode app with Wlan WPA support? |
|
| Back to top |
|
 |
flatwhatson
Joined: 29 Dec 2006 Posts: 3 Location: Brisbane, Australia
|
Posted: Thu Jan 18, 2007 8:55 pm Post subject: |
|
|
Kernel mode apps only run on <=1.5 at this point in time... and 1.5 has no kernel support for WPA. So, unless you fancy trying to implement some kind of software WPA libraries (which, if possible, would probably require a good deal of overhead), unfortunately, the answer is no.
You're not the first person to have wished for such a thing... |
|
| Back to top |
|
 |
moonlight
Joined: 26 Oct 2005 Posts: 567
|
Posted: Thu Jan 18, 2007 10:17 pm Post subject: |
|
|
You can program in kernel mode for the 3.03 kernel inside OE.
Just make sure that your main executable is an user prx inside a pbp.
This user prx can load any decrypted kernel prx from the memory stick without any kind of patch. |
|
| Back to top |
|
 |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Thu Jan 18, 2007 11:34 pm Post subject: |
|
|
| moonlight wrote: | You can program in kernel mode for the 3.03 kernel inside OE.
Just make sure that your main executable is an user prx inside a pbp.
This user prx can load any decrypted kernel prx from the memory stick without any kind of patch. |
That sounds cool moonlight!
Does it mean I need following additional lines in my Makefile?
| Code: | cp PARAM.SFO.271 PARAM.SFO pack-pbp EBOOT.PBP PARAM.SFO img/ICON_pmpvlc.png NULL NULL NULL NULL pmpvlc.prx NULL
...
BUILD_PRX = 1
...
#EXTRA_TARGETS=$(BINS) |
|
|
| Back to top |
|
 |
moonlight
Joined: 26 Oct 2005 Posts: 567
|
Posted: Fri Jan 19, 2007 2:58 am Post subject: |
|
|
| jockyw2001 wrote: | | moonlight wrote: | You can program in kernel mode for the 3.03 kernel inside OE.
Just make sure that your main executable is an user prx inside a pbp.
This user prx can load any decrypted kernel prx from the memory stick without any kind of patch. |
That sounds cool moonlight!
Does it mean I need following additional lines in my Makefile?
| Code: | cp PARAM.SFO.271 PARAM.SFO pack-pbp EBOOT.PBP PARAM.SFO img/ICON_pmpvlc.png NULL NULL NULL NULL pmpvlc.prx NULL
...
BUILD_PRX = 1
...
#EXTRA_TARGETS=$(BINS) |
|
yes. and in kernel prx don't forget yo put "USE_KERNEL_LIBS = 1". 2.80+ doesn't like user functions in kernel prx.
Last edited by moonlight on Fri Jan 19, 2007 5:11 am; edited 1 time in total |
|
| Back to top |
|
 |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Fri Jan 19, 2007 3:17 am Post subject: |
|
|
I was just about to beg for sample code when I found your SDK :)
Thanks so much!! |
|
| Back to top |
|
 |
ahman
Joined: 31 May 2006 Posts: 22
|
Posted: Fri Jan 19, 2007 5:35 pm Post subject: |
|
|
| jockyw2001, you shouldn't use networking calls within a kernel app. Doing so will cause a lot of unexpected side effects, like DHCP not working and message lost even for TCP connections. Network libraries should only be linked within a user app. If you really need to have kernel mode access for your other non-networking code, you can built 2 PRXes, one user mode & the other kernel mode. Then, have the kernel mode one export the functions to the user mode one. |
|
| Back to top |
|
 |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Fri Jan 19, 2007 6:34 pm Post subject: |
|
|
ahman: meanwhile I noticed PMP VLC can not be simply patched in the same way as you did for other apps (psp vnc, pmpmodavc, etc).
As you also suggest I was thinking to build a user mode app containing all the functionality, which imports functions from a kernel mode module which contains the ME functions.
Can I still use threads in the user mode main app? |
|
| Back to top |
|
 |
ahman
Joined: 31 May 2006 Posts: 22
|
Posted: Fri Jan 19, 2007 7:38 pm Post subject: |
|
|
| Yes, you can have user mode threads in your user mode PRX. You can also have kernel mode threads in your kernel mode PRX if it's needed, but most likely you don't need this as it will be more complicated to handshake between the threads. |
|
| Back to top |
|
 |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Fri Jan 19, 2007 7:52 pm Post subject: |
|
|
One more question regarding the AVC functions in the user mode app. Do I need to make similar mods as you did in avc.c of pmpmodavc?
| Code: | char *avc_static_init()
{
#ifdef DEVHOOK
#ifdef PSPFW302
int result = sceUtilityLoadAvModule(0);
#else
int result = pspSdkLoadStartModule("flash0:/kd/avcodec.prx", PSP_MEMORY_PARTITION_KERNEL);
#endif
if (result < 0)
{
return("avc_static_init: pspSdkLoadStartModule failed on avcodec.prx");
}
#else
int result = pspSdkLoadStartModule("flash0:/kd/audiocodec.prx", PSP_MEMORY_PARTITION_KERNEL); |
And same applies to the networking functions?
Final question, if I build me.prx from me.c, do I need to do anything special in the user mode part to call functions from me.prx ?
Thx for your support! |
|
| Back to top |
|
 |
ahman
Joined: 31 May 2006 Posts: 22
|
Posted: Fri Jan 19, 2007 8:30 pm Post subject: |
|
|
Starting from firmware 3.0x, you can no longer load encrypted sigcheck modules using sceKernelLoadModule (which pspSdkLoadStartModules calls) in a user app. You can of course still load unencrypted modules in a user app (thanks to DA's patch). Since you're developing your own kernel module (me.prx), this will be an unencrypted module and can be easily loaded with sceKernelLoadModule.
For networking libraries, you'll need to load a bunch of encrypted sigcheck modules. You can either use the kubridge functions by DA (check kubridge.h from DA's SDK), or use the standard PSP one called sceUtilityLoadNetModule. Check my latest port on pspvnc for sample.
For your me.prx (kernel module), you only need to export the functions in a exports.exp file. Then, gerneate the exports.exp into a name.S to be linked with your user mode app. You should be able to find a lot of samples around. One thing you've to be careful is make sure your kernel mode app, me.prx doesn't make any user syscalls. User syscalls are kernel module exports which allows user mode apps to access the kernel module fuctions via syscalls. Starting from firmware 2.8x, calling user syscalls from a kernel app will crash your PSP. |
|
| Back to top |
|
 |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Fri Jan 19, 2007 10:18 pm Post subject: |
|
|
Ah that's a brilliant explanation. I think I've now got all the pieces to solve the puzzle.
I always found this module stuff too fuzzy to bother. Now that homebrewn usage is boosting, I think in particular because of the 3.0+ Dark Alex firmwares, I was 'forced' to deal with it. After this discussion I understand it quite a lot better. It would be great tho if someone could provide an easy to grasp architectural overview. I'm sure other homebrewn developers will benefit from that. Perhaps groepaz might want to add this to yapspd ... ? |
|
| Back to top |
|
 |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Wed Jan 31, 2007 3:05 am Post subject: |
|
|
I'm making quite some progress on porting PMP VLC to 3.03OE, wlan with wpa and avc already work. Creating a kernel mode ME module still causes some probs. I'm following as close as possible the sdk prx_loader example. There is the import stub file MyLib.S :
.set noreorder
| Code: |
#include "pspstub.s"
STUB_START "MyLib",0x00090000,0x00010005
STUB_FUNC 0x563FF2B2,getModuleInfo
STUB_END |
How do I find these numbers (0x563FF2B2) before the function name?
And in the user mode main application do I have to do something like this before I can call the imported ME functions?
| Code: | /* Start mymodule.prx */
printf("\nStart my module\n");
modid = load_module("ms0:/mymodule.prx", 0, 0);
ret = sceKernelStartModule(modid, 0, NULL, &fd, NULL); |
|
|
| Back to top |
|
 |
moonlight
Joined: 26 Oct 2005 Posts: 567
|
Posted: Wed Jan 31, 2007 5:28 am Post subject: |
|
|
Well, i don't know if it will helpful, but in next version of OE, static elf's in user mode will be supported.
Hopefully this can fix some memory problems that happen when using prx's as main module. |
|
| Back to top |
|
 |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Wed Jan 31, 2007 6:24 am Post subject: |
|
|
Well it doesn't solve my problem at hand, but it will allow for source code debugging and that is something I look forward to :)
EDIT: For those who still wonder how to find the NIDs:
| Code: | prxtool.exe -f mymodule.prx
Export 1, Name MyLib, Functions 1, Variables 0, flags 00010000
Functions:
0x563FF2B2 [0x00000324] - MyLib_563FF2B2 |
|
|
| Back to top |
|
 |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Fri Feb 02, 2007 9:00 pm Post subject: |
|
|
I have link errors when trying to build a kernel mode ME prx module.
| Code: | /usr/local/pspdev/lib/gcc/psp/4.0.2/../../../../psp/lib/crt0_prx.o: In function
`_main':
/tmp/pspdev/pspsdk/src/startup/crt0_prx.c:88: undefined reference to `atexit'
/tmp/pspdev/pspsdk/src/startup/crt0_prx.c:94: undefined reference to `exit'
mem64.o: In function `malloc_64':
mem64.c:(.text+0x18): undefined reference to `memalign'
mem64.o: In function `free_64':
mem64.c:(.text+0x20): undefined reference to `free'
collect2: ld returned 1 exit status
make: *** [memodule.elf] Error 1 |
The Makefile is:
| Code: | TARGET = memodule
#OBJS = mestub.o me.o me_csc.o ../mem64.o ../csc.o
OBJS = mestub.o me.o me_csc.o mem64.o csc.o
# Define to build this as a prx (instead of a static elf)
BUILD_PRX=1
# Define the name of our custom exports (minus the .exp extension)
PRX_EXPORTS=exports.exp
USE_KERNEL_LIBC = 1
USE_KERNEL_LIBS = 1
INCDIR = ..
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
LIBDIR =
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak |
If I substitute the lines:
USE_KERNEL_LIBC = 1
USE_KERNEL_LIBS = 1
by:
USE_PSPSDK_LIBC = 1
then it builds memodule.prx, but afaik moonlight mentioned somewhere I must use kernel libs |
|
| Back to top |
|
 |
moonlight
Joined: 26 Oct 2005 Posts: 567
|
Posted: Sat Feb 03, 2007 12:00 pm Post subject: |
|
|
Well thanks to last patch of tyranid that i incorporated in 3.03 oe-c (and that is also in 3.03 hen), kernel modules can have again user functions. Still one has to be carefully using certain user functions in kernel mode such as the ones from ModuleMgrForUser, which would return 0x80020149 if called in kmode.
So the USE_KERNEL_LIBS = 1 is not strictly necessary now ;) |
|
| Back to top |
|
 |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Tue Feb 06, 2007 1:53 am Post subject: |
|
|
Ah very cool, another limitation gone :)
I'm pretty close to get something working, but as usual there is another problem.
In my exports.exp i'm exporting 3 functions like this:
| Code: | # Export our function
PSP_EXPORT_START(MyLib, 0, 0x0001)
PSP_EXPORT_FUNC_HASH(me_start)
PSP_EXPORT_FUNC_HASH(me_struct_init)
PSP_EXPORT_FUNC_HASH(me_sceKernelDcacheWritebackInvalidateAll)
PSP_EXPORT_END |
I can build the ME module memodule.prx, but when I look up the NIDs with prxtool I get:
Export 1, Name MyLib, Functions 3, Variables 0, flags 00010000
Functions:
| Code: | 0x6C0D2848 [0x000003DC] - MyLib_6C0D2848
0x972E503B [0x000008F0] - MyLib_972E503B
0x6DB328C6 [0x00000470] - MyLib_6DB328C6 |
Which function belongs to which NID?
Is it in the same sequence as in exports.exp? |
|
| Back to top |
|
 |
moonlight
Joined: 26 Oct 2005 Posts: 567
|
Posted: Tue Feb 06, 2007 4:24 am Post subject: |
|
|
| jockyw2001 wrote: | Ah very cool, another limitation gone :)
I'm pretty close to get something working, but as usual there is another problem.
In my exports.exp i'm exporting 3 functions like this:
| Code: | # Export our function
PSP_EXPORT_START(MyLib, 0, 0x0001)
PSP_EXPORT_FUNC_HASH(me_start)
PSP_EXPORT_FUNC_HASH(me_struct_init)
PSP_EXPORT_FUNC_HASH(me_sceKernelDcacheWritebackInvalidateAll)
PSP_EXPORT_END |
I can build the ME module memodule.prx, but when I look up the NIDs with prxtool I get:
Export 1, Name MyLib, Functions 3, Variables 0, flags 00010000
Functions:
| Code: | 0x6C0D2848 [0x000003DC] - MyLib_6C0D2848
0x972E503B [0x000008F0] - MyLib_972E503B
0x6DB328C6 [0x00000470] - MyLib_6DB328C6 |
Which function belongs to which NID?
Is it in the same sequence as in exports.exp? |
You can guess the nid by calculating the sha-1.
Sha-1 of me_start is: 48280D6C40780EDAEBC6A15370794323C5FF7CAE
Take those four bytes of the beginning, and consider they are in little endian, and you get 6C0D2848.
Btw, this library... is to be used from another kernel module or from an user one? BEcause if it is gonna be used by an user one, you should use:
PSP_EXPORT_START(MyLib, 0, 0x4001)
0x4001 -> for kernel to user import. (syscall)
0x0001 -> for user->user or kernel->kernel import. (direct jump) |
|
| Back to top |
|
 |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Tue Feb 06, 2007 4:29 am Post subject: |
|
|
| Many thanks moonlight! |
|
| Back to top |
|
 |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Wed Feb 07, 2007 1:38 am Post subject: |
|
|
| moonlight wrote: | Btw, this library... is to be used from another kernel module or from an user one? BEcause if it is gonna be used by an user one, you should use:
PSP_EXPORT_START(MyLib, 0, 0x4001)
|
My test program is a user mode app which calls exported functions from a kernel mode library fails with:
| Code: | host0:/> ./wifisimp03.prx
Failed to Load/Start module 'host0:/wifisimp03.prx' Error: 0x8002013C |
The user app is linked with this MyLib.S
| Code: | .set noreorder
#include "pspstub.s"
STUB_START "MyLib",0x40010000,0x00060005
STUB_FUNC 0x6C0D2848,me_start
STUB_FUNC 0x972E503B,me_struct_init
STUB_FUNC 0x6DB328C6,me_sceKernelDcacheWritebackInvalidateAll
STUB_FUNC 0xE04FEB89,me_wait
STUB_FUNC 0x5BAC29CF,me_unused
STUB_FUNC 0x563FF2B2,getModuleInfo
STUB_END |
and this is exports.exp of the kernel mode me library:
| Code: | # Define the exports for the prx
PSP_BEGIN_EXPORTS
# These four lines are mandatory (although you can add other functions like module_stop)
# syslib is a psynonym for the single mandatory export.
PSP_EXPORT_START(syslib, 0, 0x8000)
PSP_EXPORT_FUNC_HASH(module_start)
PSP_EXPORT_VAR_HASH(module_info)
PSP_EXPORT_END
# Export our function
PSP_EXPORT_START(MyLib, 0, 0x4001)
PSP_EXPORT_FUNC_HASH(me_start)
PSP_EXPORT_FUNC_HASH(me_struct_init)
PSP_EXPORT_FUNC_HASH(me_sceKernelDcacheWritebackInvalidateAll)
PSP_EXPORT_FUNC_HASH(me_wait)
PSP_EXPORT_FUNC_HASH(me_unused)
PSP_EXPORT_FUNC_HASH(getModuleInfo)
PSP_EXPORT_END
PSP_END_EXPORTS |
In the user app I start the kernel mode library with:
sceKernelLoadModule("host0:/memodule.prx", 0, NULL);
prxtool shows following modules in the kernel mode library:
| Code: | $ prxtool.exe -m memodule.prx
PRXTool v1.0 : (c) TyRaNiD 2k6
Built: Jan 21 2007 10:55:07
Loaded PRX memodule.prx successfully
Module information
Name: MEPRX
Attrib: 1000
Version: 1.1
GP: 0000CF00
Exports:
Export 0, Name syslib, Functions 1, Variables 1, flags 80000000
Export 1, Name MyLib, Functions 6, Variables 0, flags 40010000
Imports:
Import 0, Name IoFileMgrForUser, Functions 1, Variables 0, flags 40010000
Import 1, Name ModuleMgrForUser, Functions 1, Variables 0, flags 40010000
Import 2, Name SysMemUserForUser, Functions 4, Variables 0, flags 40000000
Import 3, Name ThreadManForUser, Functions 4, Variables 0, flags 40010000
Import 4, Name UtilsForUser, Functions 2, Variables 0, flags 40010000
Import 5, Name sceSysreg_driver, Functions 3, Variables 0, flags 00010000
Done |
prxtool shows following modules in the user mode app:
| Code: | $ prxtool.exe -m wifisimp03.prx
PRXTool v1.0 : (c) TyRaNiD 2k6
Built: Jan 21 2007 10:55:07
Loaded PRX wifisimp03.prx successfully
Module information
Name: WIFI_TEST_APP
Attrib: 0000
Version: 1.1
GP: 000157C0
Exports:
Export 0, Name syslib, Functions 1, Variables 1, flags 80000000
Imports:
Import 0, Name sceMpegbase, Functions 1, Variables 0, flags 00090000
Import 1, Name sceUtility, Functions 2, Variables 0, flags 40010000
Import 2, Name MyLib, Functions 6, Variables 0, flags 40010000
Import 3, Name sceMpeg, Functions 10, Variables 0, flags 00090000
Import 4, Name sceDisplay, Functions 2, Variables 0, flags 40010000
Import 5, Name sceGe_user, Functions 1, Variables 0, flags 40010000
Import 6, Name sceNet, Functions 2, Variables 0, flags 00090000
Import 7, Name sceNetInet, Functions 12, Variables 0, flags 00090000
Import 8, Name sceNetApctl, Functions 6, Variables 0, flags 00090000
Import 9, Name sceNetResolver, Functions 2, Variables 0, flags 00090000
Import 10, Name sceUtility, Functions 2, Variables 0, flags 40010000
Import 11, Name IoFileMgrForUser, Functions 8, Variables 0, flags 40010000
Import 12, Name ModuleMgrForUser, Functions 3, Variables 0, flags 40010000
Import 13, Name StdioForUser, Functions 3, Variables 0, flags 40010000
Import 14, Name SysMemUserForUser, Functions 4, Variables 0, flags 40000000
Import 15, Name ThreadManForUser, Functions 12, Variables 0, flags 40010000
Import 16, Name UtilsForUser, Functions 1, Variables 0, flags 40010000
Import 17, Name LoadExecForUser, Functions 1, Variables 0, flags 40010000
Import 18, Name LoadCoreForKernel, Functions 1, Variables 0, flags 00010000
Import 19, Name UtilsForKernel, Functions 1, Variables 0, flags 00090000
Done |
I'm on 3.03 oe-c
Any hints ? |
|
| Back to top |
|
 |
blondin

Joined: 07 Mar 2006 Posts: 18 Location: France (Grenoble)
|
Posted: Wed Feb 07, 2007 3:17 am Post subject: |
|
|
try this :
| Code: |
SceUID mod = pspSdkLoadStartModule(PRX_NAME, PSP_MEMORY_PARTITION_KERNEL);
if (mod < 0 )
{
printf("Loading module: '%s' failed (%x)\n", PRX_NAME, mod);
}
|
|
|
| Back to top |
|
 |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Wed Feb 07, 2007 7:14 am Post subject: |
|
|
The problem is in MyLib.S in the flags:
| Code: | | STUB_START "MyLib",0x40010000,0x00060005 |
Just linking the main user app with MyLib.o already leads to the error: 0x8002013C (Library not found)
moonlight: you suggested the 0x4001 flags in exports.exp, do you know a solution?
EDIT: Hold on, by looking at psplink I think I know how to do it. I'll give it a shot. |
|
| Back to top |
|
 |
moonlight
Joined: 26 Oct 2005 Posts: 567
|
Posted: Wed Feb 07, 2007 11:53 pm Post subject: |
|
|
| jockyw2001 wrote: | The problem is in MyLib.S in the flags:
| Code: | | STUB_START "MyLib",0x40010000,0x00060005 |
Just linking the main user app with MyLib.o already leads to the error: 0x8002013C (Library not found)
moonlight: you suggested the 0x4001 flags in exports.exp, do you know a solution?
EDIT: Hold on, by looking at psplink I think I know how to do it. I'll give it a shot. |
I think you have to use 0x00090000 instead of 0x40010000 in the stub file for late binding , since your module is obviously not loaded before your application. |
|
| Back to top |
|
 |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Thu Feb 08, 2007 1:59 am Post subject: |
|
|
I eventually managed after I discovered how TyraniD does it in psplink :)
The trick was to rewrite the stub MyLib.S similar to:
| Code: | .set noreorder
#include "pspimport.s"
#ifdef F_mymodule_0000
IMPORT_START "mymodule",0x40090000
#endif
#ifdef F_mymodule_0001
IMPORT_FUNC "mymodule",0x563FF2B2,getModuleInfo
#endif |
Then build the library libmymodule.a from MyLib.S and link the user mode app with it. The user app loads and starts the kernel mode module and happily makes function calls.
Thanks for all your help and your wonderful "oe" firmwares. I'm very curious about the .elf load feature in 3.10 oe-a. Would be cool if I can debug my apps on sourcecode level at last :) |
|
| Back to top |
|
 |
TyRaNiD
Joined: 18 Jan 2004 Posts: 918
|
Posted: Thu Feb 08, 2007 3:10 am Post subject: |
|
|
| Wait, you were actually manually writing your stubs ? |
|
| Back to top |
|
 |
jockyw2001
Joined: 29 Sep 2005 Posts: 339
|
Posted: Thu Feb 08, 2007 4:12 am Post subject: |
|
|
If that is what I did, then it didn't take much time :)
There are only 6 functions I'm exporting in exports.exp
I looked up the NIDs with prxtool and created the .S with a lot of copying and pasting.
Actually I was wondering how you did it when I saw there are 23 functions in psplink.S, most likely not by hand :)
PS: I did notice the -u option in prxtool, but that gives this:
| Code: | STUB_START "mymodule",0x40090000,0x00010005
STUB_FUNC 0x563FF2B2,mymodule_563FF2B2
STUB_END |
but I need this:
| Code: | #ifdef F_mymodule_0000
IMPORT_START "mymodule",0x40090000
#endif
#ifdef F_mymodule_0001
IMPORT_FUNC "mymodule",0x563FF2B2,getModuleInfo
#endif |
|
|
| Back to top |
|
 |
TyRaNiD
Joined: 18 Jan 2004 Posts: 918
|
Posted: Thu Feb 08, 2007 4:33 am Post subject: |
|
|
| psp-build-exports -k export.exp (or -s for the old style stubs) |
|
| Back to top |
|
 |
moonlight
Joined: 26 Oct 2005 Posts: 567
|
Posted: Thu Feb 08, 2007 8:39 am Post subject: |
|
|
| TyRaNiD wrote: | | psp-build-exports -k export.exp (or -s for the old style stubs) |
Tyranid, is there a way of generating the new style stubs from a prx with prxtool?
I guessed that the command "prxtool -o myoutput -k emc_ddr.prx" would do it... but it didn't, instead it created an idc file.
Edit: ok, found the way (prxtool -o myoutput -u -k emc_ddr.prx".
I thought that putting the -u would be redundant, but it seems mandatory. |
|
| Back to top |
|
 |
TyRaNiD
Joined: 18 Jan 2004 Posts: 918
|
Posted: Thu Feb 08, 2007 3:32 pm Post subject: |
|
|
| Yes it does seem redundant, not sure why I implemented it that way I just did and the reason is lost in the mists of time ;) I will probably fix it at some point ;) |
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|