├── .gitignore ├── COPYING_GLIBC ├── Makefile ├── README.md ├── elf.h ├── exports.yml ├── font.c ├── graphics.c ├── graphics.h ├── kernel.c └── main.c /.gitignore: -------------------------------------------------------------------------------- 1 | *.o 2 | *.vpk 3 | *.bin 4 | *.sfo 5 | *.elf 6 | *.velf 7 | *.skprx 8 | -------------------------------------------------------------------------------- /COPYING_GLIBC: -------------------------------------------------------------------------------- 1 | GNU LESSER GENERAL PUBLIC LICENSE 2 | Version 2.1, February 1999 3 | 4 | Copyright (C) 1991, 1999 Free Software Foundation, Inc. 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | [This is the first released version of the Lesser GPL. It also counts 10 | as the successor of the GNU Library Public License, version 2, hence 11 | the version number 2.1.] 12 | 13 | Preamble 14 | 15 | The licenses for most software are designed to take away your 16 | freedom to share and change it. By contrast, the GNU General Public 17 | Licenses are intended to guarantee your freedom to share and change 18 | free software--to make sure the software is free for all its users. 19 | 20 | This license, the Lesser General Public License, applies to some 21 | specially designated software packages--typically libraries--of the 22 | Free Software Foundation and other authors who decide to use it. You 23 | can use it too, but we suggest you first think carefully about whether 24 | this license or the ordinary General Public License is the better 25 | strategy to use in any particular case, based on the explanations below. 26 | 27 | When we speak of free software, we are referring to freedom of use, 28 | not price. Our General Public Licenses are designed to make sure that 29 | you have the freedom to distribute copies of free software (and charge 30 | for this service if you wish); that you receive source code or can get 31 | it if you want it; that you can change the software and use pieces of 32 | it in new free programs; and that you are informed that you can do 33 | these things. 34 | 35 | To protect your rights, we need to make restrictions that forbid 36 | distributors to deny you these rights or to ask you to surrender these 37 | rights. These restrictions translate to certain responsibilities for 38 | you if you distribute copies of the library or if you modify it. 39 | 40 | For example, if you distribute copies of the library, whether gratis 41 | or for a fee, you must give the recipients all the rights that we gave 42 | you. You must make sure that they, too, receive or can get the source 43 | code. If you link other code with the library, you must provide 44 | complete object files to the recipients, so that they can relink them 45 | with the library after making changes to the library and recompiling 46 | it. And you must show them these terms so they know their rights. 47 | 48 | We protect your rights with a two-step method: (1) we copyright the 49 | library, and (2) we offer you this license, which gives you legal 50 | permission to copy, distribute and/or modify the library. 51 | 52 | To protect each distributor, we want to make it very clear that 53 | there is no warranty for the free library. Also, if the library is 54 | modified by someone else and passed on, the recipients should know 55 | that what they have is not the original version, so that the original 56 | author's reputation will not be affected by problems that might be 57 | introduced by others. 58 | 59 | Finally, software patents pose a constant threat to the existence of 60 | any free program. We wish to make sure that a company cannot 61 | effectively restrict the users of a free program by obtaining a 62 | restrictive license from a patent holder. Therefore, we insist that 63 | any patent license obtained for a version of the library must be 64 | consistent with the full freedom of use specified in this license. 65 | 66 | Most GNU software, including some libraries, is covered by the 67 | ordinary GNU General Public License. This license, the GNU Lesser 68 | General Public License, applies to certain designated libraries, and 69 | is quite different from the ordinary General Public License. We use 70 | this license for certain libraries in order to permit linking those 71 | libraries into non-free programs. 72 | 73 | When a program is linked with a library, whether statically or using 74 | a shared library, the combination of the two is legally speaking a 75 | combined work, a derivative of the original library. The ordinary 76 | General Public License therefore permits such linking only if the 77 | entire combination fits its criteria of freedom. The Lesser General 78 | Public License permits more lax criteria for linking other code with 79 | the library. 80 | 81 | We call this license the "Lesser" General Public License because it 82 | does Less to protect the user's freedom than the ordinary General 83 | Public License. It also provides other free software developers Less 84 | of an advantage over competing non-free programs. These disadvantages 85 | are the reason we use the ordinary General Public License for many 86 | libraries. However, the Lesser license provides advantages in certain 87 | special circumstances. 88 | 89 | For example, on rare occasions, there may be a special need to 90 | encourage the widest possible use of a certain library, so that it becomes 91 | a de-facto standard. To achieve this, non-free programs must be 92 | allowed to use the library. A more frequent case is that a free 93 | library does the same job as widely used non-free libraries. In this 94 | case, there is little to gain by limiting the free library to free 95 | software only, so we use the Lesser General Public License. 96 | 97 | In other cases, permission to use a particular library in non-free 98 | programs enables a greater number of people to use a large body of 99 | free software. For example, permission to use the GNU C Library in 100 | non-free programs enables many more people to use the whole GNU 101 | operating system, as well as its variant, the GNU/Linux operating 102 | system. 103 | 104 | Although the Lesser General Public License is Less protective of the 105 | users' freedom, it does ensure that the user of a program that is 106 | linked with the Library has the freedom and the wherewithal to run 107 | that program using a modified version of the Library. 108 | 109 | The precise terms and conditions for copying, distribution and 110 | modification follow. Pay close attention to the difference between a 111 | "work based on the library" and a "work that uses the library". The 112 | former contains code derived from the library, whereas the latter must 113 | be combined with the library in order to run. 114 | 115 | GNU LESSER GENERAL PUBLIC LICENSE 116 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 117 | 118 | 0. This License Agreement applies to any software library or other 119 | program which contains a notice placed by the copyright holder or 120 | other authorized party saying it may be distributed under the terms of 121 | this Lesser General Public License (also called "this License"). 122 | Each licensee is addressed as "you". 123 | 124 | A "library" means a collection of software functions and/or data 125 | prepared so as to be conveniently linked with application programs 126 | (which use some of those functions and data) to form executables. 127 | 128 | The "Library", below, refers to any such software library or work 129 | which has been distributed under these terms. A "work based on the 130 | Library" means either the Library or any derivative work under 131 | copyright law: that is to say, a work containing the Library or a 132 | portion of it, either verbatim or with modifications and/or translated 133 | straightforwardly into another language. (Hereinafter, translation is 134 | included without limitation in the term "modification".) 135 | 136 | "Source code" for a work means the preferred form of the work for 137 | making modifications to it. For a library, complete source code means 138 | all the source code for all modules it contains, plus any associated 139 | interface definition files, plus the scripts used to control compilation 140 | and installation of the library. 141 | 142 | Activities other than copying, distribution and modification are not 143 | covered by this License; they are outside its scope. The act of 144 | running a program using the Library is not restricted, and output from 145 | such a program is covered only if its contents constitute a work based 146 | on the Library (independent of the use of the Library in a tool for 147 | writing it). Whether that is true depends on what the Library does 148 | and what the program that uses the Library does. 149 | 150 | 1. You may copy and distribute verbatim copies of the Library's 151 | complete source code as you receive it, in any medium, provided that 152 | you conspicuously and appropriately publish on each copy an 153 | appropriate copyright notice and disclaimer of warranty; keep intact 154 | all the notices that refer to this License and to the absence of any 155 | warranty; and distribute a copy of this License along with the 156 | Library. 157 | 158 | You may charge a fee for the physical act of transferring a copy, 159 | and you may at your option offer warranty protection in exchange for a 160 | fee. 161 | 162 | 2. You may modify your copy or copies of the Library or any portion 163 | of it, thus forming a work based on the Library, and copy and 164 | distribute such modifications or work under the terms of Section 1 165 | above, provided that you also meet all of these conditions: 166 | 167 | a) The modified work must itself be a software library. 168 | 169 | b) You must cause the files modified to carry prominent notices 170 | stating that you changed the files and the date of any change. 171 | 172 | c) You must cause the whole of the work to be licensed at no 173 | charge to all third parties under the terms of this License. 174 | 175 | d) If a facility in the modified Library refers to a function or a 176 | table of data to be supplied by an application program that uses 177 | the facility, other than as an argument passed when the facility 178 | is invoked, then you must make a good faith effort to ensure that, 179 | in the event an application does not supply such function or 180 | table, the facility still operates, and performs whatever part of 181 | its purpose remains meaningful. 182 | 183 | (For example, a function in a library to compute square roots has 184 | a purpose that is entirely well-defined independent of the 185 | application. Therefore, Subsection 2d requires that any 186 | application-supplied function or table used by this function must 187 | be optional: if the application does not supply it, the square 188 | root function must still compute square roots.) 189 | 190 | These requirements apply to the modified work as a whole. If 191 | identifiable sections of that work are not derived from the Library, 192 | and can be reasonably considered independent and separate works in 193 | themselves, then this License, and its terms, do not apply to those 194 | sections when you distribute them as separate works. But when you 195 | distribute the same sections as part of a whole which is a work based 196 | on the Library, the distribution of the whole must be on the terms of 197 | this License, whose permissions for other licensees extend to the 198 | entire whole, and thus to each and every part regardless of who wrote 199 | it. 200 | 201 | Thus, it is not the intent of this section to claim rights or contest 202 | your rights to work written entirely by you; rather, the intent is to 203 | exercise the right to control the distribution of derivative or 204 | collective works based on the Library. 205 | 206 | In addition, mere aggregation of another work not based on the Library 207 | with the Library (or with a work based on the Library) on a volume of 208 | a storage or distribution medium does not bring the other work under 209 | the scope of this License. 210 | 211 | 3. You may opt to apply the terms of the ordinary GNU General Public 212 | License instead of this License to a given copy of the Library. To do 213 | this, you must alter all the notices that refer to this License, so 214 | that they refer to the ordinary GNU General Public License, version 2, 215 | instead of to this License. (If a newer version than version 2 of the 216 | ordinary GNU General Public License has appeared, then you can specify 217 | that version instead if you wish.) Do not make any other change in 218 | these notices. 219 | 220 | Once this change is made in a given copy, it is irreversible for 221 | that copy, so the ordinary GNU General Public License applies to all 222 | subsequent copies and derivative works made from that copy. 223 | 224 | This option is useful when you wish to copy part of the code of 225 | the Library into a program that is not a library. 226 | 227 | 4. You may copy and distribute the Library (or a portion or 228 | derivative of it, under Section 2) in object code or executable form 229 | under the terms of Sections 1 and 2 above provided that you accompany 230 | it with the complete corresponding machine-readable source code, which 231 | must be distributed under the terms of Sections 1 and 2 above on a 232 | medium customarily used for software interchange. 233 | 234 | If distribution of object code is made by offering access to copy 235 | from a designated place, then offering equivalent access to copy the 236 | source code from the same place satisfies the requirement to 237 | distribute the source code, even though third parties are not 238 | compelled to copy the source along with the object code. 239 | 240 | 5. A program that contains no derivative of any portion of the 241 | Library, but is designed to work with the Library by being compiled or 242 | linked with it, is called a "work that uses the Library". Such a 243 | work, in isolation, is not a derivative work of the Library, and 244 | therefore falls outside the scope of this License. 245 | 246 | However, linking a "work that uses the Library" with the Library 247 | creates an executable that is a derivative of the Library (because it 248 | contains portions of the Library), rather than a "work that uses the 249 | library". The executable is therefore covered by this License. 250 | Section 6 states terms for distribution of such executables. 251 | 252 | When a "work that uses the Library" uses material from a header file 253 | that is part of the Library, the object code for the work may be a 254 | derivative work of the Library even though the source code is not. 255 | Whether this is true is especially significant if the work can be 256 | linked without the Library, or if the work is itself a library. The 257 | threshold for this to be true is not precisely defined by law. 258 | 259 | If such an object file uses only numerical parameters, data 260 | structure layouts and accessors, and small macros and small inline 261 | functions (ten lines or less in length), then the use of the object 262 | file is unrestricted, regardless of whether it is legally a derivative 263 | work. (Executables containing this object code plus portions of the 264 | Library will still fall under Section 6.) 265 | 266 | Otherwise, if the work is a derivative of the Library, you may 267 | distribute the object code for the work under the terms of Section 6. 268 | Any executables containing that work also fall under Section 6, 269 | whether or not they are linked directly with the Library itself. 270 | 271 | 6. As an exception to the Sections above, you may also combine or 272 | link a "work that uses the Library" with the Library to produce a 273 | work containing portions of the Library, and distribute that work 274 | under terms of your choice, provided that the terms permit 275 | modification of the work for the customer's own use and reverse 276 | engineering for debugging such modifications. 277 | 278 | You must give prominent notice with each copy of the work that the 279 | Library is used in it and that the Library and its use are covered by 280 | this License. You must supply a copy of this License. If the work 281 | during execution displays copyright notices, you must include the 282 | copyright notice for the Library among them, as well as a reference 283 | directing the user to the copy of this License. Also, you must do one 284 | of these things: 285 | 286 | a) Accompany the work with the complete corresponding 287 | machine-readable source code for the Library including whatever 288 | changes were used in the work (which must be distributed under 289 | Sections 1 and 2 above); and, if the work is an executable linked 290 | with the Library, with the complete machine-readable "work that 291 | uses the Library", as object code and/or source code, so that the 292 | user can modify the Library and then relink to produce a modified 293 | executable containing the modified Library. (It is understood 294 | that the user who changes the contents of definitions files in the 295 | Library will not necessarily be able to recompile the application 296 | to use the modified definitions.) 297 | 298 | b) Use a suitable shared library mechanism for linking with the 299 | Library. A suitable mechanism is one that (1) uses at run time a 300 | copy of the library already present on the user's computer system, 301 | rather than copying library functions into the executable, and (2) 302 | will operate properly with a modified version of the library, if 303 | the user installs one, as long as the modified version is 304 | interface-compatible with the version that the work was made with. 305 | 306 | c) Accompany the work with a written offer, valid for at 307 | least three years, to give the same user the materials 308 | specified in Subsection 6a, above, for a charge no more 309 | than the cost of performing this distribution. 310 | 311 | d) If distribution of the work is made by offering access to copy 312 | from a designated place, offer equivalent access to copy the above 313 | specified materials from the same place. 314 | 315 | e) Verify that the user has already received a copy of these 316 | materials or that you have already sent this user a copy. 317 | 318 | For an executable, the required form of the "work that uses the 319 | Library" must include any data and utility programs needed for 320 | reproducing the executable from it. However, as a special exception, 321 | the materials to be distributed need not include anything that is 322 | normally distributed (in either source or binary form) with the major 323 | components (compiler, kernel, and so on) of the operating system on 324 | which the executable runs, unless that component itself accompanies 325 | the executable. 326 | 327 | It may happen that this requirement contradicts the license 328 | restrictions of other proprietary libraries that do not normally 329 | accompany the operating system. Such a contradiction means you cannot 330 | use both them and the Library together in an executable that you 331 | distribute. 332 | 333 | 7. You may place library facilities that are a work based on the 334 | Library side-by-side in a single library together with other library 335 | facilities not covered by this License, and distribute such a combined 336 | library, provided that the separate distribution of the work based on 337 | the Library and of the other library facilities is otherwise 338 | permitted, and provided that you do these two things: 339 | 340 | a) Accompany the combined library with a copy of the same work 341 | based on the Library, uncombined with any other library 342 | facilities. This must be distributed under the terms of the 343 | Sections above. 344 | 345 | b) Give prominent notice with the combined library of the fact 346 | that part of it is a work based on the Library, and explaining 347 | where to find the accompanying uncombined form of the same work. 348 | 349 | 8. You may not copy, modify, sublicense, link with, or distribute 350 | the Library except as expressly provided under this License. Any 351 | attempt otherwise to copy, modify, sublicense, link with, or 352 | distribute the Library is void, and will automatically terminate your 353 | rights under this License. However, parties who have received copies, 354 | or rights, from you under this License will not have their licenses 355 | terminated so long as such parties remain in full compliance. 356 | 357 | 9. You are not required to accept this License, since you have not 358 | signed it. However, nothing else grants you permission to modify or 359 | distribute the Library or its derivative works. These actions are 360 | prohibited by law if you do not accept this License. Therefore, by 361 | modifying or distributing the Library (or any work based on the 362 | Library), you indicate your acceptance of this License to do so, and 363 | all its terms and conditions for copying, distributing or modifying 364 | the Library or works based on it. 365 | 366 | 10. Each time you redistribute the Library (or any work based on the 367 | Library), the recipient automatically receives a license from the 368 | original licensor to copy, distribute, link with or modify the Library 369 | subject to these terms and conditions. You may not impose any further 370 | restrictions on the recipients' exercise of the rights granted herein. 371 | You are not responsible for enforcing compliance by third parties with 372 | this License. 373 | 374 | 11. If, as a consequence of a court judgment or allegation of patent 375 | infringement or for any other reason (not limited to patent issues), 376 | conditions are imposed on you (whether by court order, agreement or 377 | otherwise) that contradict the conditions of this License, they do not 378 | excuse you from the conditions of this License. If you cannot 379 | distribute so as to satisfy simultaneously your obligations under this 380 | License and any other pertinent obligations, then as a consequence you 381 | may not distribute the Library at all. For example, if a patent 382 | license would not permit royalty-free redistribution of the Library by 383 | all those who receive copies directly or indirectly through you, then 384 | the only way you could satisfy both it and this License would be to 385 | refrain entirely from distribution of the Library. 386 | 387 | If any portion of this section is held invalid or unenforceable under any 388 | particular circumstance, the balance of the section is intended to apply, 389 | and the section as a whole is intended to apply in other circumstances. 390 | 391 | It is not the purpose of this section to induce you to infringe any 392 | patents or other property right claims or to contest validity of any 393 | such claims; this section has the sole purpose of protecting the 394 | integrity of the free software distribution system which is 395 | implemented by public license practices. Many people have made 396 | generous contributions to the wide range of software distributed 397 | through that system in reliance on consistent application of that 398 | system; it is up to the author/donor to decide if he or she is willing 399 | to distribute software through any other system and a licensee cannot 400 | impose that choice. 401 | 402 | This section is intended to make thoroughly clear what is believed to 403 | be a consequence of the rest of this License. 404 | 405 | 12. If the distribution and/or use of the Library is restricted in 406 | certain countries either by patents or by copyrighted interfaces, the 407 | original copyright holder who places the Library under this License may add 408 | an explicit geographical distribution limitation excluding those countries, 409 | so that distribution is permitted only in or among countries not thus 410 | excluded. In such case, this License incorporates the limitation as if 411 | written in the body of this License. 412 | 413 | 13. The Free Software Foundation may publish revised and/or new 414 | versions of the Lesser General Public License from time to time. 415 | Such new versions will be similar in spirit to the present version, 416 | but may differ in detail to address new problems or concerns. 417 | 418 | Each version is given a distinguishing version number. If the Library 419 | specifies a version number of this License which applies to it and 420 | "any later version", you have the option of following the terms and 421 | conditions either of that version or of any later version published by 422 | the Free Software Foundation. If the Library does not specify a 423 | license version number, you may choose any version ever published by 424 | the Free Software Foundation. 425 | 426 | 14. If you wish to incorporate parts of the Library into other free 427 | programs whose distribution conditions are incompatible with these, 428 | write to the author to ask for permission. For software which is 429 | copyrighted by the Free Software Foundation, write to the Free 430 | Software Foundation; we sometimes make exceptions for this. Our 431 | decision will be guided by the two goals of preserving the free status 432 | of all derivatives of our free software and of promoting the sharing 433 | and reuse of software generally. 434 | 435 | NO WARRANTY 436 | 437 | 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO 438 | WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. 439 | EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR 440 | OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY 441 | KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE 442 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 443 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE 444 | LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME 445 | THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 446 | 447 | 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN 448 | WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY 449 | AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU 450 | FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR 451 | CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE 452 | LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING 453 | RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A 454 | FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF 455 | SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH 456 | DAMAGES. 457 | 458 | END OF TERMS AND CONDITIONS 459 | 460 | How to Apply These Terms to Your New Libraries 461 | 462 | If you develop a new library, and you want it to be of the greatest 463 | possible use to the public, we recommend making it free software that 464 | everyone can redistribute and change. You can do so by permitting 465 | redistribution under these terms (or, alternatively, under the terms of the 466 | ordinary General Public License). 467 | 468 | To apply these terms, attach the following notices to the library. It is 469 | safest to attach them to the start of each source file to most effectively 470 | convey the exclusion of warranty; and each file should have at least the 471 | "copyright" line and a pointer to where the full notice is found. 472 | 473 | 474 | Copyright (C) 475 | 476 | This library is free software; you can redistribute it and/or 477 | modify it under the terms of the GNU Lesser General Public 478 | License as published by the Free Software Foundation; either 479 | version 2.1 of the License, or (at your option) any later version. 480 | 481 | This library is distributed in the hope that it will be useful, 482 | but WITHOUT ANY WARRANTY; without even the implied warranty of 483 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 484 | Lesser General Public License for more details. 485 | 486 | You should have received a copy of the GNU Lesser General Public 487 | License along with this library; if not, write to the Free Software 488 | Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 489 | 490 | Also add information on how to contact you by electronic and paper mail. 491 | 492 | You should also get your employer (if you work as a programmer) or your 493 | school, if any, to sign a "copyright disclaimer" for the library, if 494 | necessary. Here is a sample; alter the names: 495 | 496 | Yoyodyne, Inc., hereby disclaims all copyright interest in the 497 | library `Frob' (a library for tweaking knobs) written by James Random Hacker. 498 | 499 | , 1 April 1990 500 | Ty Coon, President of Vice 501 | 502 | That's all there is to it! 503 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | TITLE_ID = NIDUMP001 2 | TARGET = mDump 3 | PSVITAIP = 192.168.1.115 4 | 5 | MAIN_OBJS = main.o graphics.o font.o 6 | PLUGIN_OBJS = kernel.o 7 | HEADERS = $(wildcard *.h) 8 | 9 | LIBS = -lSceDisplay_stub -lSceGxm_stub -lSceCtrl_stub -lSceSysmodule_stub 10 | PLUGIN_LIBS = -Llibtaihen_stub.a -lSceSysclibForDriver_stub -lSceModulemgrForKernel_stub -lSceIofilemgrForDriver_stub 11 | 12 | PREFIX = arm-vita-eabi 13 | CC = $(PREFIX)-gcc 14 | CFLAGS = -Wl,-q -Wall -O3 15 | ASFLAGS = $(CFLAGS) 16 | 17 | all: mDump.vpk kDump.skprx 18 | 19 | mDump.vpk: eboot.bin 20 | vita-mksfoex -s TITLE_ID=$(TITLE_ID) "$(TARGET)" param.sfo 21 | vita-pack-vpk -s param.sfo -b eboot.bin $@ 22 | 23 | eboot.bin: $(TARGET).velf 24 | vita-make-fself -c $< eboot.bin 25 | 26 | mDump.velf: mDump.elf 27 | vita-elf-create $< $@ 28 | 29 | mDump.elf: $(MAIN_OBJS) 30 | $(CC) $(CFLAGS) $^ $(LIBS) -o $@ 31 | 32 | kDump.skprx: kDump.velf 33 | vita-make-fself -c $< $@ 34 | 35 | kDump.velf: kDump.elf 36 | vita-elf-create -e exports.yml $< $@ 37 | 38 | kDump.elf: $(PLUGIN_OBJS) 39 | $(CC) $(CFLAGS) $^ $(PLUGIN_LIBS) -o $@ -nostdlib 40 | 41 | clean: 42 | @rm -rf *.velf *.elf *.vpk *.skprx $(MAIN_OBJS) $(PLUGIN_OBJS) param.sfo eboot.bin 43 | 44 | send: eboot.bin 45 | curl -T eboot.bin ftp://$(PSVITAIP):1337/ux0:/app/$(TITLE_ID)/ 46 | @echo "Sent." 47 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # vitadump 2 | This homebrew can dump some PS Vita shared modules 3 | 4 | It was based in : https://github.com/xyzz/vita-modump/ 5 | 6 | Credits: 7 | xyzz - original vita-modump 8 | St4rk 9 | SMOKE -------------------------------------------------------------------------------- /exports.yml: -------------------------------------------------------------------------------- 1 | vita_dump: 2 | attributes: 0 3 | version: 4 | major: 1 5 | minor: 1 6 | main: 7 | start: module_start 8 | stop: module_stop 9 | -------------------------------------------------------------------------------- /font.c: -------------------------------------------------------------------------------- 1 | /* 2 | * PSP Software Development Kit - http://www.pspdev.org 3 | * ----------------------------------------------------------------------- 4 | * Licensed under the BSD license, see LICENSE in PSPSDK root for details. 5 | * 6 | * font.c - Debug Font. 7 | * 8 | * Copyright (c) 2005 Marcus R. Brown 9 | * Copyright (c) 2005 James Forshaw 10 | * Copyright (c) 2005 John Kelley 11 | * 12 | * $Id: font.c 540 2005-07-08 19:35:10Z warren $ 13 | */ 14 | 15 | unsigned char msx[]= 16 | "\x00\x00\x00\x00\x00\x00\x00\x00\x3c\x42\xa5\x81\xa5\x99\x42\x3c" 17 | "\x3c\x7e\xdb\xff\xff\xdb\x66\x3c\x6c\xfe\xfe\xfe\x7c\x38\x10\x00" 18 | "\x10\x38\x7c\xfe\x7c\x38\x10\x00\x10\x38\x54\xfe\x54\x10\x38\x00" 19 | "\x10\x38\x7c\xfe\xfe\x10\x38\x00\x00\x00\x00\x30\x30\x00\x00\x00" 20 | "\xff\xff\xff\xe7\xe7\xff\xff\xff\x38\x44\x82\x82\x82\x44\x38\x00" 21 | "\xc7\xbb\x7d\x7d\x7d\xbb\xc7\xff\x0f\x03\x05\x79\x88\x88\x88\x70" 22 | "\x38\x44\x44\x44\x38\x10\x7c\x10\x30\x28\x24\x24\x28\x20\xe0\xc0" 23 | "\x3c\x24\x3c\x24\x24\xe4\xdc\x18\x10\x54\x38\xee\x38\x54\x10\x00" 24 | "\x10\x10\x10\x7c\x10\x10\x10\x10\x10\x10\x10\xff\x00\x00\x00\x00" 25 | "\x00\x00\x00\xff\x10\x10\x10\x10\x10\x10\x10\xf0\x10\x10\x10\x10" 26 | "\x10\x10\x10\x1f\x10\x10\x10\x10\x10\x10\x10\xff\x10\x10\x10\x10" 27 | "\x10\x10\x10\x10\x10\x10\x10\x10\x00\x00\x00\xff\x00\x00\x00\x00" 28 | "\x00\x00\x00\x1f\x10\x10\x10\x10\x00\x00\x00\xf0\x10\x10\x10\x10" 29 | "\x10\x10\x10\x1f\x00\x00\x00\x00\x10\x10\x10\xf0\x00\x00\x00\x00" 30 | "\x81\x42\x24\x18\x18\x24\x42\x81\x01\x02\x04\x08\x10\x20\x40\x80" 31 | "\x80\x40\x20\x10\x08\x04\x02\x01\x00\x10\x10\xff\x10\x10\x00\x00" 32 | "\x00\x00\x00\x00\x00\x00\x00\x00\x20\x20\x20\x20\x00\x00\x20\x00" 33 | "\x50\x50\x50\x00\x00\x00\x00\x00\x50\x50\xf8\x50\xf8\x50\x50\x00" 34 | "\x20\x78\xa0\x70\x28\xf0\x20\x00\xc0\xc8\x10\x20\x40\x98\x18\x00" 35 | "\x40\xa0\x40\xa8\x90\x98\x60\x00\x10\x20\x40\x00\x00\x00\x00\x00" 36 | "\x10\x20\x40\x40\x40\x20\x10\x00\x40\x20\x10\x10\x10\x20\x40\x00" 37 | "\x20\xa8\x70\x20\x70\xa8\x20\x00\x00\x20\x20\xf8\x20\x20\x00\x00" 38 | "\x00\x00\x00\x00\x00\x20\x20\x40\x00\x00\x00\x78\x00\x00\x00\x00" 39 | "\x00\x00\x00\x00\x00\x60\x60\x00\x00\x00\x08\x10\x20\x40\x80\x00" 40 | "\x70\x88\x98\xa8\xc8\x88\x70\x00\x20\x60\xa0\x20\x20\x20\xf8\x00" 41 | "\x70\x88\x08\x10\x60\x80\xf8\x00\x70\x88\x08\x30\x08\x88\x70\x00" 42 | "\x10\x30\x50\x90\xf8\x10\x10\x00\xf8\x80\xe0\x10\x08\x10\xe0\x00" 43 | "\x30\x40\x80\xf0\x88\x88\x70\x00\xf8\x88\x10\x20\x20\x20\x20\x00" 44 | "\x70\x88\x88\x70\x88\x88\x70\x00\x70\x88\x88\x78\x08\x10\x60\x00" 45 | "\x00\x00\x20\x00\x00\x20\x00\x00\x00\x00\x20\x00\x00\x20\x20\x40" 46 | "\x18\x30\x60\xc0\x60\x30\x18\x00\x00\x00\xf8\x00\xf8\x00\x00\x00" 47 | "\xc0\x60\x30\x18\x30\x60\xc0\x00\x70\x88\x08\x10\x20\x00\x20\x00" 48 | "\x70\x88\x08\x68\xa8\xa8\x70\x00\x20\x50\x88\x88\xf8\x88\x88\x00" 49 | "\xf0\x48\x48\x70\x48\x48\xf0\x00\x30\x48\x80\x80\x80\x48\x30\x00" 50 | "\xe0\x50\x48\x48\x48\x50\xe0\x00\xf8\x80\x80\xf0\x80\x80\xf8\x00" 51 | "\xf8\x80\x80\xf0\x80\x80\x80\x00\x70\x88\x80\xb8\x88\x88\x70\x00" 52 | "\x88\x88\x88\xf8\x88\x88\x88\x00\x70\x20\x20\x20\x20\x20\x70\x00" 53 | "\x38\x10\x10\x10\x90\x90\x60\x00\x88\x90\xa0\xc0\xa0\x90\x88\x00" 54 | "\x80\x80\x80\x80\x80\x80\xf8\x00\x88\xd8\xa8\xa8\x88\x88\x88\x00" 55 | "\x88\xc8\xc8\xa8\x98\x98\x88\x00\x70\x88\x88\x88\x88\x88\x70\x00" 56 | "\xf0\x88\x88\xf0\x80\x80\x80\x00\x70\x88\x88\x88\xa8\x90\x68\x00" 57 | "\xf0\x88\x88\xf0\xa0\x90\x88\x00\x70\x88\x80\x70\x08\x88\x70\x00" 58 | "\xf8\x20\x20\x20\x20\x20\x20\x00\x88\x88\x88\x88\x88\x88\x70\x00" 59 | "\x88\x88\x88\x88\x50\x50\x20\x00\x88\x88\x88\xa8\xa8\xd8\x88\x00" 60 | "\x88\x88\x50\x20\x50\x88\x88\x00\x88\x88\x88\x70\x20\x20\x20\x00" 61 | "\xf8\x08\x10\x20\x40\x80\xf8\x00\x70\x40\x40\x40\x40\x40\x70\x00" 62 | "\x00\x00\x80\x40\x20\x10\x08\x00\x70\x10\x10\x10\x10\x10\x70\x00" 63 | "\x20\x50\x88\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf8\x00" 64 | "\x40\x20\x10\x00\x00\x00\x00\x00\x00\x00\x70\x08\x78\x88\x78\x00" 65 | "\x80\x80\xb0\xc8\x88\xc8\xb0\x00\x00\x00\x70\x88\x80\x88\x70\x00" 66 | "\x08\x08\x68\x98\x88\x98\x68\x00\x00\x00\x70\x88\xf8\x80\x70\x00" 67 | "\x10\x28\x20\xf8\x20\x20\x20\x00\x00\x00\x68\x98\x98\x68\x08\x70" 68 | "\x80\x80\xf0\x88\x88\x88\x88\x00\x20\x00\x60\x20\x20\x20\x70\x00" 69 | "\x10\x00\x30\x10\x10\x10\x90\x60\x40\x40\x48\x50\x60\x50\x48\x00" 70 | "\x60\x20\x20\x20\x20\x20\x70\x00\x00\x00\xd0\xa8\xa8\xa8\xa8\x00" 71 | "\x00\x00\xb0\xc8\x88\x88\x88\x00\x00\x00\x70\x88\x88\x88\x70\x00" 72 | "\x00\x00\xb0\xc8\xc8\xb0\x80\x80\x00\x00\x68\x98\x98\x68\x08\x08" 73 | "\x00\x00\xb0\xc8\x80\x80\x80\x00\x00\x00\x78\x80\xf0\x08\xf0\x00" 74 | "\x40\x40\xf0\x40\x40\x48\x30\x00\x00\x00\x90\x90\x90\x90\x68\x00" 75 | "\x00\x00\x88\x88\x88\x50\x20\x00\x00\x00\x88\xa8\xa8\xa8\x50\x00" 76 | "\x00\x00\x88\x50\x20\x50\x88\x00\x00\x00\x88\x88\x98\x68\x08\x70" 77 | "\x00\x00\xf8\x10\x20\x40\xf8\x00\x18\x20\x20\x40\x20\x20\x18\x00" 78 | "\x20\x20\x20\x00\x20\x20\x20\x00\xc0\x20\x20\x10\x20\x20\xc0\x00" 79 | "\x40\xa8\x10\x00\x00\x00\x00\x00\x00\x00\x20\x50\xf8\x00\x00\x00" 80 | "\x70\x88\x80\x80\x88\x70\x20\x60\x90\x00\x00\x90\x90\x90\x68\x00" 81 | "\x10\x20\x70\x88\xf8\x80\x70\x00\x20\x50\x70\x08\x78\x88\x78\x00" 82 | "\x48\x00\x70\x08\x78\x88\x78\x00\x20\x10\x70\x08\x78\x88\x78\x00" 83 | "\x20\x00\x70\x08\x78\x88\x78\x00\x00\x70\x80\x80\x80\x70\x10\x60" 84 | "\x20\x50\x70\x88\xf8\x80\x70\x00\x50\x00\x70\x88\xf8\x80\x70\x00" 85 | "\x20\x10\x70\x88\xf8\x80\x70\x00\x50\x00\x00\x60\x20\x20\x70\x00" 86 | "\x20\x50\x00\x60\x20\x20\x70\x00\x40\x20\x00\x60\x20\x20\x70\x00" 87 | "\x50\x00\x20\x50\x88\xf8\x88\x00\x20\x00\x20\x50\x88\xf8\x88\x00" 88 | "\x10\x20\xf8\x80\xf0\x80\xf8\x00\x00\x00\x6c\x12\x7e\x90\x6e\x00" 89 | "\x3e\x50\x90\x9c\xf0\x90\x9e\x00\x60\x90\x00\x60\x90\x90\x60\x00" 90 | "\x90\x00\x00\x60\x90\x90\x60\x00\x40\x20\x00\x60\x90\x90\x60\x00" 91 | "\x40\xa0\x00\xa0\xa0\xa0\x50\x00\x40\x20\x00\xa0\xa0\xa0\x50\x00" 92 | "\x90\x00\x90\x90\xb0\x50\x10\xe0\x50\x00\x70\x88\x88\x88\x70\x00" 93 | "\x50\x00\x88\x88\x88\x88\x70\x00\x20\x20\x78\x80\x80\x78\x20\x20" 94 | "\x18\x24\x20\xf8\x20\xe2\x5c\x00\x88\x50\x20\xf8\x20\xf8\x20\x00" 95 | "\xc0\xa0\xa0\xc8\x9c\x88\x88\x8c\x18\x20\x20\xf8\x20\x20\x20\x40" 96 | "\x10\x20\x70\x08\x78\x88\x78\x00\x10\x20\x00\x60\x20\x20\x70\x00" 97 | "\x20\x40\x00\x60\x90\x90\x60\x00\x20\x40\x00\x90\x90\x90\x68\x00" 98 | "\x50\xa0\x00\xa0\xd0\x90\x90\x00\x28\x50\x00\xc8\xa8\x98\x88\x00" 99 | "\x00\x70\x08\x78\x88\x78\x00\xf8\x00\x60\x90\x90\x90\x60\x00\xf0" 100 | "\x20\x00\x20\x40\x80\x88\x70\x00\x00\x00\x00\xf8\x80\x80\x00\x00" 101 | "\x00\x00\x00\xf8\x08\x08\x00\x00\x84\x88\x90\xa8\x54\x84\x08\x1c" 102 | "\x84\x88\x90\xa8\x58\xa8\x3c\x08\x20\x00\x00\x20\x20\x20\x20\x00" 103 | "\x00\x00\x24\x48\x90\x48\x24\x00\x00\x00\x90\x48\x24\x48\x90\x00" 104 | "\x28\x50\x20\x50\x88\xf8\x88\x00\x28\x50\x70\x08\x78\x88\x78\x00" 105 | "\x28\x50\x00\x70\x20\x20\x70\x00\x28\x50\x00\x20\x20\x20\x70\x00" 106 | "\x28\x50\x00\x70\x88\x88\x70\x00\x50\xa0\x00\x60\x90\x90\x60\x00" 107 | "\x28\x50\x00\x88\x88\x88\x70\x00\x50\xa0\x00\xa0\xa0\xa0\x50\x00" 108 | "\xfc\x48\x48\x48\xe8\x08\x50\x20\x00\x50\x00\x50\x50\x50\x10\x20" 109 | "\xc0\x44\xc8\x54\xec\x54\x9e\x04\x10\xa8\x40\x00\x00\x00\x00\x00" 110 | "\x00\x20\x50\x88\x50\x20\x00\x00\x88\x10\x20\x40\x80\x28\x00\x00" 111 | "\x7c\xa8\xa8\x68\x28\x28\x28\x00\x38\x40\x30\x48\x48\x30\x08\x70" 112 | "\x00\x00\x00\x00\x00\x00\xff\xff\xf0\xf0\xf0\xf0\x0f\x0f\x0f\x0f" 113 | "\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00" 114 | "\x00\x00\x00\x3c\x3c\x00\x00\x00\xff\xff\xff\xff\xff\xff\x00\x00" 115 | "\xc0\xc0\xc0\xc0\xc0\xc0\xc0\xc0\x0f\x0f\x0f\x0f\xf0\xf0\xf0\xf0" 116 | "\xfc\xfc\xfc\xfc\xfc\xfc\xfc\xfc\x03\x03\x03\x03\x03\x03\x03\x03" 117 | "\x3f\x3f\x3f\x3f\x3f\x3f\x3f\x3f\x11\x22\x44\x88\x11\x22\x44\x88" 118 | "\x88\x44\x22\x11\x88\x44\x22\x11\xfe\x7c\x38\x10\x00\x00\x00\x00" 119 | "\x00\x00\x00\x00\x10\x38\x7c\xfe\x80\xc0\xe0\xf0\xe0\xc0\x80\x00" 120 | "\x01\x03\x07\x0f\x07\x03\x01\x00\xff\x7e\x3c\x18\x18\x3c\x7e\xff" 121 | "\x81\xc3\xe7\xff\xff\xe7\xc3\x81\xf0\xf0\xf0\xf0\x00\x00\x00\x00" 122 | "\x00\x00\x00\x00\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x00\x00\x00\x00" 123 | "\x00\x00\x00\x00\xf0\xf0\xf0\xf0\x33\x33\xcc\xcc\x33\x33\xcc\xcc" 124 | "\x00\x20\x20\x50\x50\x88\xf8\x00\x20\x20\x70\x20\x70\x20\x20\x00" 125 | "\x00\x00\x00\x50\x88\xa8\x50\x00\xff\xff\xff\xff\xff\xff\xff\xff" 126 | "\x00\x00\x00\x00\xff\xff\xff\xff\xf0\xf0\xf0\xf0\xf0\xf0\xf0\xf0" 127 | "\x0f\x0f\x0f\x0f\x0f\x0f\x0f\x0f\xff\xff\xff\xff\x00\x00\x00\x00" 128 | "\x00\x00\x68\x90\x90\x90\x68\x00\x30\x48\x48\x70\x48\x48\x70\xc0" 129 | "\xf8\x88\x80\x80\x80\x80\x80\x00\xf8\x50\x50\x50\x50\x50\x98\x00" 130 | "\xf8\x88\x40\x20\x40\x88\xf8\x00\x00\x00\x78\x90\x90\x90\x60\x00" 131 | "\x00\x50\x50\x50\x50\x68\x80\x80\x00\x50\xa0\x20\x20\x20\x20\x00" 132 | "\xf8\x20\x70\xa8\xa8\x70\x20\xf8\x20\x50\x88\xf8\x88\x50\x20\x00" 133 | "\x70\x88\x88\x88\x50\x50\xd8\x00\x30\x40\x40\x20\x50\x50\x50\x20" 134 | "\x00\x00\x00\x50\xa8\xa8\x50\x00\x08\x70\xa8\xa8\xa8\x70\x80\x00" 135 | "\x38\x40\x80\xf8\x80\x40\x38\x00\x70\x88\x88\x88\x88\x88\x88\x00" 136 | "\x00\xf8\x00\xf8\x00\xf8\x00\x00\x20\x20\xf8\x20\x20\x00\xf8\x00" 137 | "\xc0\x30\x08\x30\xc0\x00\xf8\x00\x18\x60\x80\x60\x18\x00\xf8\x00" 138 | "\x10\x28\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\xa0\x40" 139 | "\x00\x20\x00\xf8\x00\x20\x00\x00\x00\x50\xa0\x00\x50\xa0\x00\x00" 140 | "\x00\x18\x24\x24\x18\x00\x00\x00\x00\x30\x78\x78\x30\x00\x00\x00" 141 | "\x00\x00\x00\x00\x30\x00\x00\x00\x3e\x20\x20\x20\xa0\x60\x20\x00" 142 | "\xa0\x50\x50\x50\x00\x00\x00\x00\x40\xa0\x20\x40\xe0\x00\x00\x00" 143 | "\x00\x38\x38\x38\x38\x38\x38\x00\x00\x00\x00\x00\x00\x00\x00"; 144 | -------------------------------------------------------------------------------- /graphics.c: -------------------------------------------------------------------------------- 1 | #include "graphics.h" 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #define SCE_DISPLAY_UPDATETIMING_NEXTVSYNC SCE_DISPLAY_SETBUF_NEXTFRAME 8 | #include 9 | #include 10 | #include 11 | 12 | enum { 13 | SCREEN_WIDTH = 960, 14 | SCREEN_HEIGHT = 544, 15 | LINE_SIZE = 960, 16 | FRAMEBUFFER_SIZE = 2 * 1024 * 1024, 17 | FRAMEBUFFER_ALIGNMENT = 256 * 1024 18 | }; 19 | 20 | typedef union 21 | { 22 | int rgba; 23 | struct 24 | { 25 | char r; 26 | char g; 27 | char b; 28 | char a; 29 | } c; 30 | } color_t; 31 | 32 | extern u8 msx[]; 33 | void* g_vram_base; 34 | static int gX = 0; 35 | static int gY = 0; 36 | 37 | static Color g_fg_color; 38 | static Color g_bg_color; 39 | 40 | static Color* getVramDisplayBuffer() 41 | { 42 | Color* vram = (Color*) g_vram_base; 43 | return vram; 44 | } 45 | 46 | // #define LOG(args...) vita_logf (__FILE__, __LINE__, args) ///< Write a log entry 47 | 48 | int g_log_mutex; 49 | 50 | void psvDebugScreenInit() { 51 | g_log_mutex = sceKernelCreateMutex("log_mutex", 0, 0, NULL); 52 | 53 | SceKernelAllocMemBlockOpt opt = { 0 }; 54 | #ifdef VITASDK 55 | opt.size = 4 * 5; 56 | #else 57 | opt.size = sizeof(opt); 58 | #endif 59 | opt.attr = 0x00000004; 60 | opt.alignment = FRAMEBUFFER_ALIGNMENT; 61 | SceUID displayblock = sceKernelAllocMemBlock("display", SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW, FRAMEBUFFER_SIZE, &opt); 62 | printf("displayblock: 0x%08x", displayblock); 63 | void *base; 64 | sceKernelGetMemBlockBase(displayblock, &base); 65 | // LOG("base: 0x%08x", base); 66 | 67 | SceDisplayFrameBuf framebuf = { 0 }; 68 | framebuf.size = sizeof(framebuf); 69 | framebuf.base = base; 70 | framebuf.pitch = SCREEN_WIDTH; 71 | framebuf.pixelformat = SCE_DISPLAY_PIXELFORMAT_A8B8G8R8; 72 | framebuf.width = SCREEN_WIDTH; 73 | framebuf.height = SCREEN_HEIGHT; 74 | 75 | g_vram_base = base; 76 | 77 | sceDisplaySetFrameBuf(&framebuf, SCE_DISPLAY_UPDATETIMING_NEXTVSYNC); 78 | 79 | g_fg_color = 0xFFFFFFFF; 80 | g_bg_color = 0x00000000; 81 | } 82 | 83 | void psvDebugScreenClear(int bg_color) 84 | { 85 | gX = gY = 0; 86 | int i; 87 | color_t *pixel = (color_t *)getVramDisplayBuffer(); 88 | for(i = 0; i < SCREEN_WIDTH * SCREEN_HEIGHT; i++) { 89 | pixel->rgba = bg_color; 90 | pixel++; 91 | } 92 | } 93 | 94 | static void printTextScreen(const char * text) 95 | { 96 | int c, i, j, l; 97 | u8 *font; 98 | Color *vram_ptr; 99 | Color *vram; 100 | 101 | for (c = 0; c < strlen(text); c++) { 102 | if (gX + 8 > SCREEN_WIDTH) { 103 | gY += 8; 104 | gX = 0; 105 | } 106 | if (gY + 8 > SCREEN_HEIGHT) { 107 | gY = 0; 108 | psvDebugScreenClear(g_bg_color); 109 | } 110 | char ch = text[c]; 111 | if (ch == '\n') { 112 | gX = 0; 113 | gY += 8; 114 | continue; 115 | } else if (ch == '\r') { 116 | gX = 0; 117 | continue; 118 | } 119 | 120 | vram = getVramDisplayBuffer() + gX + gY * LINE_SIZE; 121 | 122 | font = &msx[ (int)ch * 8]; 123 | for (i = l = 0; i < 8; i++, l += 8, font++) { 124 | vram_ptr = vram; 125 | for (j = 0; j < 8; j++) { 126 | if ((*font & (128 >> j))) *vram_ptr = g_fg_color; 127 | else *vram_ptr = g_bg_color; 128 | vram_ptr++; 129 | } 130 | vram += LINE_SIZE; 131 | } 132 | gX += 8; 133 | } 134 | } 135 | 136 | void psvDebugScreenPrintf(const char *format, ...) { 137 | char buf[512]; 138 | 139 | sceKernelLockMutex(g_log_mutex, 1, NULL); 140 | 141 | va_list opt; 142 | va_start(opt, format); 143 | vsnprintf(buf, sizeof(buf), format, opt); 144 | printTextScreen(buf); 145 | va_end(opt); 146 | 147 | sceKernelUnlockMutex(g_log_mutex, 1); 148 | } 149 | 150 | Color psvDebugScreenSetFgColor(Color color) { 151 | Color prev_color = g_fg_color; 152 | g_fg_color = color; 153 | return prev_color; 154 | } 155 | 156 | Color psvDebugScreenSetBgColor(Color color) { 157 | Color prev_color = g_bg_color; 158 | g_bg_color = color; 159 | return prev_color; 160 | } 161 | -------------------------------------------------------------------------------- /graphics.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | typedef unsigned char u8; 4 | typedef unsigned u32; 5 | typedef u32 Color; 6 | 7 | // allocates memory for framebuffer and initializes it 8 | void psvDebugScreenInit(); 9 | 10 | // clears screen with a given color 11 | void psvDebugScreenClear(int bg_color); 12 | 13 | // printf to the screen 14 | void psvDebugScreenPrintf(const char *format, ...); 15 | 16 | // set foreground (text) color 17 | Color psvDebugScreenSetFgColor(Color color); 18 | 19 | // set background color 20 | Color psvDebugScreenSetBgColor(Color color); 21 | 22 | enum { 23 | COLOR_CYAN = 0xFFFFFF00, 24 | COLOR_WHITE = 0xFFFFFFFF, 25 | COLOR_BLACK = 0xFF000000, 26 | COLOR_RED = 0xFF0000FF, 27 | COLOR_YELLOW = 0xFF00FFFF, 28 | COLOR_GREY = 0xFF808080 29 | }; 30 | -------------------------------------------------------------------------------- /kernel.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include "elf.h" 9 | 10 | #define DUMP_PATH "ux0:dump/" 11 | #define LOG_FILE DUMP_PATH "kplugin_log.txt" 12 | 13 | static void log_reset(); 14 | static void log_write(const char *buffer, size_t length); 15 | 16 | #define LOG(...) \ 17 | do { \ 18 | char buffer[256]; \ 19 | snprintf(buffer, sizeof(buffer), ##__VA_ARGS__); \ 20 | log_write(buffer, strlen(buffer)); \ 21 | } while (0) 22 | 23 | static void dump_region(const char *filename, void *addr, unsigned int size) 24 | { 25 | SceUID fd; 26 | 27 | if (!(fd = ksceIoOpen(filename, SCE_O_WRONLY | SCE_O_CREAT | SCE_O_TRUNC, 6))) { 28 | LOG("Error opening %s\n", filename); 29 | return; 30 | } 31 | 32 | ksceIoWrite(fd, addr, size); 33 | 34 | ksceIoClose(fd); 35 | } 36 | 37 | void _start() __attribute__ ((weak, alias ("module_start"))); 38 | 39 | #define MOD_LIST_SIZE 0x80 40 | 41 | 42 | void doDump(const SceKernelModuleInfo *info) { 43 | char path[128] = {0}; 44 | int i; 45 | SceUID fd; 46 | Elf32_Ehdr ehdr; 47 | Elf32_Phdr phdr; 48 | Elf32_Off offset; 49 | 50 | snprintf(path, sizeof(path), DUMP_PATH "%s.elf", 51 | info->module_name); 52 | 53 | LOG("Dumping %s\n", path); 54 | 55 | fd = ksceIoOpen(path, SCE_O_CREAT | SCE_O_WRONLY | SCE_O_TRUNC, 6); 56 | if (fd < 0) { 57 | LOG("Failed to open the file for writing.\n"); 58 | return; 59 | } 60 | 61 | ehdr.e_ident[EI_MAG0] = ELFMAG0; 62 | ehdr.e_ident[EI_MAG1] = ELFMAG1; 63 | ehdr.e_ident[EI_MAG2] = ELFMAG2; 64 | ehdr.e_ident[EI_MAG3] = ELFMAG3; 65 | ehdr.e_ident[EI_CLASS] = ELFCLASS32; 66 | ehdr.e_ident[EI_DATA] = ELFDATA2LSB; 67 | ehdr.e_ident[EI_VERSION] = EV_CURRENT; 68 | ehdr.e_ident[EI_OSABI] = ELFOSABI_ARM_AEABI; 69 | ehdr.e_ident[EI_ABIVERSION] = 0; 70 | memset(ehdr.e_ident + EI_PAD, 0, EI_NIDENT - EI_PAD); 71 | ehdr.e_type = ET_CORE; 72 | ehdr.e_machine = EM_ARM; 73 | ehdr.e_version = EV_CURRENT; 74 | ehdr.e_entry = (Elf32_Addr)info->module_start; 75 | ehdr.e_phoff = sizeof(ehdr); 76 | ehdr.e_flags = EF_ARM_HASENTRY 77 | | EF_ARM_ABI_FLOAT_HARD 78 | | EF_ARM_EABI_VER5; 79 | ehdr.e_ehsize = sizeof(ehdr); 80 | ehdr.e_phentsize = sizeof(Elf32_Phdr); 81 | ehdr.e_shentsize = sizeof(Elf32_Shdr); 82 | ehdr.e_shnum = 0; 83 | ehdr.e_shstrndx = 0; 84 | 85 | ehdr.e_shoff = 0; 86 | ehdr.e_phnum = 0; 87 | for (i = 0; i < 4; ++i) { 88 | if (info->segments[i].vaddr == NULL) 89 | continue; 90 | 91 | ++ehdr.e_phnum; 92 | } 93 | 94 | ksceIoWrite(fd, &ehdr, sizeof(ehdr)); 95 | 96 | offset = sizeof(ehdr) + ehdr.e_phnum * sizeof(phdr); 97 | phdr.p_type = PT_LOAD; 98 | phdr.p_paddr = 0; 99 | phdr.p_align = 1; 100 | for (i = 0; i < 4; ++i) { 101 | if (info->segments[i].vaddr == NULL) 102 | continue; 103 | 104 | phdr.p_flags = info->segments[i].perms; 105 | phdr.p_offset = offset; 106 | phdr.p_vaddr = (Elf32_Addr)info->segments[i].vaddr; 107 | phdr.p_memsz = info->segments[i].memsz; 108 | phdr.p_filesz = phdr.p_memsz; 109 | 110 | ksceIoWrite(fd, &phdr, sizeof(phdr)); 111 | 112 | offset += phdr.p_filesz; 113 | } 114 | 115 | for (i = 0; i < 4; ++i) { 116 | if (info->segments[i].vaddr == NULL) { 117 | LOG("Segment #%x is empty, skipping\n", i); 118 | continue; 119 | } 120 | 121 | ksceIoWrite(fd, info->segments[i].vaddr, info->segments[i].memsz); 122 | } 123 | 124 | ksceIoClose(fd); 125 | 126 | snprintf(path, sizeof(path), DUMP_PATH "%s_info.bin", 127 | info->module_name); 128 | 129 | LOG("Dumping %s\n", path); 130 | 131 | fd = ksceIoOpen(path, SCE_O_CREAT | SCE_O_WRONLY | SCE_O_TRUNC, 6); 132 | if (fd < 0) { 133 | LOG("Failed to open the file for writing.\n"); 134 | return; 135 | } 136 | 137 | ksceIoWrite(fd, info, sizeof(*info)); 138 | ksceIoClose(fd); 139 | } 140 | 141 | 142 | int module_start(SceSize argc, const void *args) 143 | { 144 | int i, j; 145 | int ret; 146 | size_t num; 147 | SceKernelModuleInfo modinfo; 148 | SceUID modlist[MOD_LIST_SIZE]; 149 | 150 | log_reset(); 151 | 152 | LOG("kplugin by xerpi\n"); 153 | 154 | memset(modlist, 0, sizeof(modlist)); 155 | 156 | num = MOD_LIST_SIZE; 157 | ret = ksceKernelGetModuleList(KERNEL_PID, 0x80000001, 1, modlist, &num); 158 | if (ret < 0) 159 | LOG("Error getting the module list\n"); 160 | 161 | LOG("Found %d modules.\n", num); 162 | 163 | for (i = 0; i < num; i++) { 164 | memset(&modinfo, 0, sizeof(modinfo)); 165 | 166 | ret = ksceKernelGetModuleInfo(KERNEL_PID, modlist[i], &modinfo); 167 | if (ret < 0) { 168 | LOG("Error getting the module info for module: %d\n", i); 169 | continue; 170 | } 171 | 172 | LOG("Module %d name: %s\n", i, modinfo.module_name); 173 | 174 | for (j = 0; j < 4; j++) { 175 | char path[128]; 176 | SceKernelSegmentInfo *seginfo = &modinfo.segments[j]; 177 | 178 | if (seginfo->size != sizeof(*seginfo)) 179 | continue; 180 | 181 | if (seginfo->vaddr == NULL) 182 | continue; 183 | 184 | snprintf(path, sizeof(path), DUMP_PATH "%s_0x%08X_seg%d.bin", 185 | modinfo.module_name, (uintptr_t)seginfo->vaddr, j); 186 | 187 | dump_region(path, seginfo->vaddr, seginfo->memsz); 188 | } 189 | doDump(&modinfo); 190 | } 191 | 192 | return SCE_KERNEL_START_SUCCESS; 193 | } 194 | 195 | int module_stop(SceSize argc, const void *args) 196 | { 197 | return SCE_KERNEL_STOP_SUCCESS; 198 | } 199 | 200 | void log_reset() 201 | { 202 | SceUID fd = ksceIoOpen(LOG_FILE, 203 | SCE_O_WRONLY | SCE_O_CREAT | SCE_O_TRUNC, 6); 204 | if (fd < 0) 205 | return; 206 | 207 | ksceIoClose(fd); 208 | } 209 | 210 | void log_write(const char *buffer, size_t length) 211 | { 212 | extern int ksceIoMkdir(const char *, int); 213 | ksceIoMkdir(DUMP_PATH, 6); 214 | 215 | SceUID fd = ksceIoOpen(LOG_FILE, 216 | SCE_O_WRONLY | SCE_O_CREAT | SCE_O_APPEND, 6); 217 | if (fd < 0) 218 | return; 219 | 220 | ksceIoWrite(fd, buffer, length); 221 | ksceIoClose(fd); 222 | } 223 | -------------------------------------------------------------------------------- /main.c: -------------------------------------------------------------------------------- 1 | /* 2 | * PS Vita 3.60 module dump 3 | * Based on https://github.com/xyzz/vita-modump/blob/master/main.c 4 | * Credits goes to xyz (original vita-modump), st4rk, smoke and theflow 5 | * it's very buggy 6 | */ 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | #include 13 | #include 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include "elf.h" 21 | 22 | #include "graphics.h" 23 | 24 | #define MAX_LOADED_MODULES 256 25 | #define MAX_PATH_LENGTH 1024 26 | 27 | const char *outDir = "ux0:/dump"; 28 | 29 | int removePath(const char *path, uint32_t *value, uint32_t max, void (* SetProgress)(uint32_t value, uint32_t max), int (* cancelHandler)()) { 30 | SceUID dfd = sceIoDopen(path); 31 | if (dfd >= 0) { 32 | int res = 0; 33 | 34 | do { 35 | SceIoDirent dir; 36 | memset(&dir, 0, sizeof(SceIoDirent)); 37 | 38 | res = sceIoDread(dfd, &dir); 39 | if (res > 0) { 40 | if (strcmp(dir.d_name, ".") == 0 || strcmp(dir.d_name, "..") == 0) 41 | continue; 42 | 43 | char *new_path = malloc(strlen(path) + strlen(dir.d_name) + 2); 44 | snprintf(new_path, MAX_PATH_LENGTH, "%s/%s", path, dir.d_name); 45 | 46 | if (SCE_S_ISDIR(dir.d_stat.st_mode)) { 47 | int ret = removePath(new_path, value, max, SetProgress, cancelHandler); 48 | if (ret <= 0) { 49 | free(new_path); 50 | sceIoDclose(dfd); 51 | return ret; 52 | } 53 | } else { 54 | int ret = sceIoRemove(new_path); 55 | if (ret < 0) { 56 | free(new_path); 57 | sceIoDclose(dfd); 58 | return ret; 59 | } 60 | 61 | if (value) 62 | (*value)++; 63 | 64 | if (SetProgress) 65 | SetProgress(value ? *value : 0, max); 66 | 67 | if (cancelHandler && cancelHandler()) { 68 | free(new_path); 69 | sceIoDclose(dfd); 70 | return 0; 71 | } 72 | } 73 | 74 | free(new_path); 75 | } 76 | } while (res > 0); 77 | 78 | sceIoDclose(dfd); 79 | 80 | int ret = sceIoRmdir(path); 81 | if (ret < 0) 82 | return ret; 83 | 84 | if (value) 85 | (*value)++; 86 | 87 | if (SetProgress) 88 | SetProgress(value ? *value : 0, max); 89 | 90 | if (cancelHandler && cancelHandler()) { 91 | return 0; 92 | } 93 | } else { 94 | int ret = sceIoRemove(path); 95 | if (ret < 0) 96 | return ret; 97 | 98 | if (value) 99 | (*value)++; 100 | 101 | if (SetProgress) 102 | SetProgress(value ? *value : 0, max); 103 | 104 | if (cancelHandler && cancelHandler()) { 105 | return 0; 106 | } 107 | } 108 | 109 | return 1; 110 | } 111 | 112 | void doDump(SceUID id, SceKernelModuleInfo *info) { 113 | char filename[2048] = {0}; 114 | int i; 115 | int fout; 116 | Elf32_Ehdr ehdr; 117 | Elf32_Phdr phdr; 118 | Elf32_Off offset; 119 | 120 | snprintf(filename, sizeof(filename), "%s/%s.elf", 121 | outDir, info->module_name); 122 | 123 | psvDebugScreenPrintf("Dumping %s\n", filename); 124 | 125 | if (!(fout = sceIoOpen(filename, SCE_O_CREAT | SCE_O_WRONLY, 0777))) { 126 | psvDebugScreenPrintf("Failed to open the file for writing.\n"); 127 | return; 128 | } 129 | 130 | ehdr.e_ident[EI_MAG0] = ELFMAG0; 131 | ehdr.e_ident[EI_MAG1] = ELFMAG1; 132 | ehdr.e_ident[EI_MAG2] = ELFMAG2; 133 | ehdr.e_ident[EI_MAG3] = ELFMAG3; 134 | ehdr.e_ident[EI_CLASS] = ELFCLASS32; 135 | ehdr.e_ident[EI_DATA] = ELFDATA2LSB; 136 | ehdr.e_ident[EI_VERSION] = EV_CURRENT; 137 | ehdr.e_ident[EI_OSABI] = ELFOSABI_ARM_AEABI; 138 | ehdr.e_ident[EI_ABIVERSION] = 0; 139 | memset(ehdr.e_ident + EI_PAD, 0, EI_NIDENT - EI_PAD); 140 | ehdr.e_type = ET_CORE; 141 | ehdr.e_machine = EM_ARM; 142 | ehdr.e_version = EV_CURRENT; 143 | ehdr.e_entry = (Elf32_Addr)info->module_start; 144 | ehdr.e_phoff = sizeof (ehdr); 145 | ehdr.e_flags = EF_ARM_HASENTRY 146 | | EF_ARM_ABI_FLOAT_HARD 147 | | EF_ARM_EABI_VER5; 148 | ehdr.e_ehsize = sizeof (ehdr); 149 | ehdr.e_phentsize = sizeof (Elf32_Phdr); 150 | ehdr.e_shentsize = sizeof (Elf32_Shdr); 151 | ehdr.e_shnum = 0; 152 | ehdr.e_shstrndx = 0; 153 | 154 | ehdr.e_shoff = 0; 155 | ehdr.e_phnum = 0; 156 | for (i = 0; i < 4; ++i) { 157 | if (info->segments[i].vaddr == NULL) 158 | continue; 159 | 160 | ++ehdr.e_phnum; 161 | } 162 | 163 | sceIoWrite (fout, &ehdr, sizeof (ehdr)); 164 | 165 | offset = sizeof (ehdr) + ehdr.e_phnum * sizeof(phdr); 166 | phdr.p_type = PT_LOAD; 167 | phdr.p_paddr = 0; 168 | phdr.p_align = 1; 169 | for (i = 0; i < 4; ++i) { 170 | if (info->segments[i].vaddr == NULL) 171 | continue; 172 | 173 | phdr.p_flags = info->segments[i].perms; 174 | phdr.p_offset = offset; 175 | phdr.p_vaddr = (Elf32_Addr)info->segments[i].vaddr; 176 | phdr.p_memsz = info->segments[i].memsz; 177 | phdr.p_filesz = phdr.p_memsz; 178 | 179 | sceIoWrite (fout, &phdr, sizeof (phdr)); 180 | 181 | offset += phdr.p_filesz; 182 | } 183 | 184 | for (i = 0; i < 4; ++i) { 185 | if (info->segments[i].vaddr == NULL) { 186 | psvDebugScreenPrintf("Segment #%x is empty, skipping\n", i); 187 | continue; 188 | } 189 | 190 | sceIoWrite(fout, info->segments[i].vaddr, info->segments[i].memsz); 191 | } 192 | 193 | sceIoClose(fout); 194 | 195 | snprintf(filename, sizeof(filename), "%s/%s_info.bin", 196 | outDir, info->module_name); 197 | 198 | psvDebugScreenPrintf("Dumping %s\n", filename); 199 | 200 | if (!(fout = sceIoOpen(filename, SCE_O_CREAT | SCE_O_WRONLY, 0777))) { 201 | psvDebugScreenPrintf("Failed to open the file for writing.\n"); 202 | return; 203 | } 204 | 205 | sceIoWrite (fout, info, sizeof (*info)); 206 | sceIoClose (fout); 207 | } 208 | 209 | /* 210 | * Thanks to flatz 211 | */ 212 | void dumpModuleByPath(char *module_name, char *path) { 213 | int result = 0; 214 | SceUID moduleId = 0; 215 | SceKernelModuleInfo info; 216 | 217 | psvDebugScreenPrintf("Module: %s. Attempting to load: '%s'.\n", module_name, path); 218 | moduleId = sceKernelLoadModule(path, 0, NULL); 219 | if (moduleId > 0) { 220 | psvDebugScreenPrintf("The module was loaded with success\n"); 221 | info.size = sizeof(info); 222 | 223 | if ((result = sceKernelGetModuleInfo(moduleId, &info)) < 0) { 224 | psvDebugScreenPrintf("Failed to get module information, ID: %d, result: 0x%08x\n", moduleId, result); 225 | } else { 226 | doDump(moduleId, &info); 227 | } 228 | 229 | sceKernelUnloadModule(moduleId, 0, NULL); 230 | } else { 231 | psvDebugScreenPrintf("Failed to load module: 0x%08X\n", moduleId); 232 | } 233 | } 234 | 235 | void dumpModule(SceUID id) { 236 | int result = 0; 237 | SceKernelLMOption opt; 238 | int reloadModule = 0; 239 | SceKernelModuleInfo info; 240 | 241 | 242 | if ((result = sceKernelGetModuleInfo(id, &info)) < 0) { 243 | psvDebugScreenPrintf("Failed to get module information, ID: %d, result: 0x%08x\n", id, result); 244 | return; 245 | } 246 | 247 | psvDebugScreenPrintf("Module: %s. Attempting to reload: '%s'.\n", info.module_name, info.path); 248 | 249 | if (strncmp(info.path, "ux0:/patch", 11) == 0) { 250 | char newPath[2048] = {0}; 251 | char *modulePath = strchr(info.path + 11, '/'); 252 | strcpy(newPath, "app0:"); 253 | strcpy(newPath+5, modulePath); 254 | 255 | psvDebugScreenPrintf("Module path for reloading changed to: %s\n", newPath); 256 | 257 | reloadModule = sceKernelLoadModule(newPath, 0, &opt); 258 | } else { 259 | reloadModule = sceKernelLoadModule(info.path, 0, &opt); 260 | } 261 | 262 | 263 | if (reloadModule > 0) { 264 | psvDebugScreenPrintf("The module was reloaded with success\n"); 265 | info.size = sizeof(info); 266 | 267 | if ((result = sceKernelGetModuleInfo(reloadModule, &info)) < 0) { 268 | psvDebugScreenPrintf("Failed to get info for the reloaded module, result: %08x\n", result); 269 | } else { 270 | doDump(reloadModule, &info); 271 | } 272 | 273 | //sceKernelUnloadModule(reloadModule, 0, &opt); 274 | } else { 275 | psvDebugScreenPrintf("Failed to reload module, NID will remain poisoned\n"); 276 | doDump(id, &info); 277 | } 278 | 279 | } 280 | 281 | void newModules() { 282 | SceUInt16 i = 0; 283 | 284 | for (i = 0; i < 0xFF; i++) { 285 | int result = sceSysmoduleLoadModule(i); 286 | 287 | if (result != 0) 288 | psvDebugScreenPrintf("Error while loading module %d result: %08x\n", i, result); 289 | } 290 | } 291 | 292 | int main(int argc, char **argv) { 293 | //int mList[MAX_LOADED_MODULES]; 294 | //int nLoaded = MAX_LOADED_MODULES; 295 | 296 | psvDebugScreenInit(); 297 | psvDebugScreenPrintf("Starting module dump...\n"); 298 | 299 | 300 | int result = 0; 301 | 302 | if ((result = sceIoOpen(outDir,SCE_O_RDONLY, 0777)) < 0) { 303 | result = sceIoMkdir(outDir, 0777); 304 | 305 | if (result == 0) { 306 | psvDebugScreenPrintf("The output dir was created\n"); 307 | } else { 308 | psvDebugScreenPrintf("Directory exists\nDeleting and recreating...\n"); 309 | removePath(outDir, NULL, 0, NULL, NULL); 310 | sceIoMkdir(outDir, 0777); 311 | goto _continue_; 312 | } 313 | } 314 | 315 | _continue_: 316 | 317 | /*psvDebugScreenPrintf("Loading addtional modules\n"); 318 | 319 | newModules(); 320 | 321 | if ((result = sceKernelGetModuleList(0xFF, mList, &nLoaded)) < 0) { 322 | psvDebugScreenPrintf("Failed to get module list, result: %08x\n", result); 323 | goto _exit_; 324 | } 325 | 326 | psvDebugScreenPrintf("Total modules loaded: %d\n", nLoaded); 327 | 328 | SceUID i = 0; 329 | 330 | for (i = 0; i < nLoaded; ++i) 331 | dumpModule(mList[i]); 332 | */ 333 | psvDebugScreenPrintf("Dumping modules by name\n"); 334 | 335 | //dumpModuleByPath("1e6c89bb6fd70485", "pd0:app/NPXS10007/sce_module/libc.suprx"); 336 | //dumpModuleByPath("3c3b85ca044fab22", "pd0:app/NPXS10007/sce_module/libfios2.suprx"); 337 | //dumpModuleByPath("9ce10e890f276561", "pd0:app/NPXS10007/sce_module/libult.suprx"); 338 | 339 | //251 USERMODULES 340 | dumpModuleByPath("2800000000028005", "os0:us/avcodec_us.suprx"); 341 | dumpModuleByPath("280000000002800a", "os0:us/driver_us.suprx"); 342 | dumpModuleByPath("280000000002802a", "os0:us/libgpu_es4.suprx"); 343 | dumpModuleByPath("2800000000028030", "os0:us/libgxm_es4.suprx"); 344 | dumpModuleByPath("2800000000028034", "os0:us/libkernel.suprx"); 345 | dumpModuleByPath("2800000000000015", "os0:ue/safemode.self"); 346 | dumpModuleByPath("2800000000000027", "vs0:/app/NPXS10000/eboot.bin"); 347 | dumpModuleByPath("2800000000000026", "vs0:/app/NPXS10001/eboot.bin"); 348 | dumpModuleByPath("280000000002001f", "vs0:/app/NPXS10001/np_party_app.suprx"); 349 | dumpModuleByPath("280000000000001c", "vs0:/app/NPXS10002/eboot.bin"); 350 | dumpModuleByPath("2800000000000025", "vs0:/app/NPXS10003/eboot.bin"); 351 | dumpModuleByPath("2800000000000018", "vs0:/app/NPXS10004/eboot.bin"); 352 | dumpModuleByPath("280000000000001a", "vs0:/app/NPXS10006/eboot.bin"); 353 | dumpModuleByPath("280000000000001b", "vs0:/app/NPXS10008/eboot.bin"); 354 | dumpModuleByPath("2800000000000011", "vs0:/app/NPXS10009/eboot.bin"); 355 | dumpModuleByPath("280000000000001e", "vs0:/app/NPXS10010/eboot.bin"); 356 | dumpModuleByPath("2800000000000012", "vs0:/app/NPXS10012/eboot.bin"); 357 | dumpModuleByPath("280000000000700a", "vs0:/app/NPXS10013/eboot.bin"); 358 | dumpModuleByPath("2800000000020045", "vs0:/app/NPXS10013/gaikai-player.suprx"); 359 | dumpModuleByPath("2800000000020046", "vs0:/app/NPXS10013/libSceSecondScreen.suprx"); 360 | dumpModuleByPath("2800000000000020", "vs0:/app/NPXS10014/eboot.bin"); 361 | dumpModuleByPath("2800000000000010", "vs0:/app/NPXS10015/eboot.bin"); 362 | dumpModuleByPath("2800000000020024", "vs0:/app/NPXS10015/system_settings_core.suprx"); 363 | dumpModuleByPath("2800000000000019", "vs0:/app/NPXS10018/eboot.bin"); 364 | dumpModuleByPath("2800000000000029", "vs0:/app/NPXS10021/eboot.bin"); 365 | dumpModuleByPath("2800000000020026", "vs0:/app/NPXS10021/tel_reg.suprx"); 366 | dumpModuleByPath("2800000000000016", "vs0:/app/NPXS10023/eboot.bin"); 367 | dumpModuleByPath("280000000000002b", "vs0:/app/NPXS10024/eboot.bin"); 368 | dumpModuleByPath("280000000000002c", "vs0:/app/NPXS10025/eboot.bin"); 369 | dumpModuleByPath("280000000000002d", "vs0:/app/NPXS10026/eboot.bin"); 370 | dumpModuleByPath("2800000000000022", "vs0:/app/NPXS10027/eboot.bin"); 371 | dumpModuleByPath("2800000000000013", "vs0:/app/NPXS10028/eboot.bin"); 372 | dumpModuleByPath("2808000000000101", "vs0:/app/NPXS10028/pcff.skprx"); 373 | dumpModuleByPath("280000000000002a", "vs0:/app/NPXS10029/eboot.bin"); 374 | dumpModuleByPath("280000000000002e", "vs0:/app/NPXS10031/eboot.bin"); 375 | dumpModuleByPath("280000000000002f", "vs0:/app/NPXS10032/eboot.bin"); 376 | dumpModuleByPath("2800000000000031", "vs0:/app/NPXS10036/eboot.bin"); 377 | dumpModuleByPath("2800000000000021", "vs0:/app/NPXS10063/eboot.bin"); 378 | dumpModuleByPath("2800000000000034", "vs0:/app/NPXS10065/eboot.bin"); 379 | dumpModuleByPath("2800000000020030", "vs0:/app/NPXS10065/grief_report_dialog.suprx"); 380 | dumpModuleByPath("2800000000000035", "vs0:/app/NPXS10072/eboot.bin"); 381 | dumpModuleByPath("2800000000020035", "vs0:/app/NPXS10072/email_engine.suprx"); 382 | dumpModuleByPath("2800000000000037", "vs0:/app/NPXS10073/eboot.bin"); 383 | dumpModuleByPath("2800000000000036", "vs0:/app/NPXS10077/eboot.bin"); 384 | dumpModuleByPath("2800000000000040", "vs0:/app/NPXS10078/eboot.bin"); 385 | dumpModuleByPath("2800000000000039", "vs0:/app/NPXS10079/eboot.bin"); 386 | dumpModuleByPath("2800000000000041", "vs0:/app/NPXS10080/eboot.bin"); 387 | dumpModuleByPath("2800000000000038", "vs0:/app/NPXS10081/eboot.bin"); 388 | //This one doesn't work, no idea why 389 | //dumpModuleByPath("2800800000000015", "vs0:/app/NPXS10082/spawn.self"); 390 | dumpModuleByPath("2800000000008005", "vs0:/app/NPXS10083/eboot.bin"); 391 | dumpModuleByPath("2800000000008005", "vs0:/app/NPXS10084/eboot.bin"); 392 | dumpModuleByPath("2800000000000044", "vs0:/app/NPXS10085/eboot.bin"); 393 | dumpModuleByPath("2800000000000042", "vs0:/app/NPXS10091/eboot.bin"); 394 | dumpModuleByPath("2800000000000043", "vs0:/app/NPXS10092/eboot.bin"); 395 | dumpModuleByPath("2800000000000046", "vs0:/app/NPXS10094/eboot.bin"); 396 | dumpModuleByPath("2800000000000045", "vs0:/app/NPXS10095/eboot.bin"); 397 | dumpModuleByPath("280000000000700a", "vs0:/app/NPXS10098/eboot.bin"); 398 | dumpModuleByPath("2800000000020045", "vs0:/app/NPXS10098/gaikai-player.suprx"); 399 | dumpModuleByPath("2800000000000047", "vs0:/app/NPXS10100/eboot.bin"); 400 | dumpModuleByPath("2800000000000048", "vs0:/app/NPXS10101/eboot.bin"); 401 | dumpModuleByPath("280000000002807f", "vs0:/data/external/webcore/jx_web_filtering.suprx"); 402 | dumpModuleByPath("2800000000028097", "vs0:/data/external/webcore/ScePsp2Compat.suprx"); 403 | dumpModuleByPath("2800000000028099", "vs0:/data/external/webcore/SceWebKitModule.suprx"); 404 | dumpModuleByPath("280000000002807e", "vs0:/data/external/webcore/vita_jsextobj.suprx"); 405 | dumpModuleByPath("2800000000028001", "vs0:/sys/external/activity_db.suprx"); 406 | dumpModuleByPath("2800000000028002", "vs0:/sys/external/adhoc_matching.suprx"); 407 | dumpModuleByPath("2800000000028003", "vs0:/sys/external/apputil.suprx"); 408 | dumpModuleByPath("28000000000280a5", "vs0:/sys/external/apputil_ext.suprx"); 409 | dumpModuleByPath("2800000000028004", "vs0:/sys/external/audiocodec.suprx"); 410 | dumpModuleByPath("28000000000280ac", "vs0:/sys/external/avcdec_for_player.suprx"); 411 | dumpModuleByPath("2800000000028086", "vs0:/sys/external/bgapputil.suprx"); 412 | dumpModuleByPath("2800000000028007", "vs0:/sys/external/bXCe.suprx"); 413 | dumpModuleByPath("2800000000028008", "vs0:/sys/external/common_gui_dialog.suprx"); 414 | dumpModuleByPath("2800000000028080", "vs0:/sys/external/dbrecovery_utility.suprx"); 415 | dumpModuleByPath("2800000000028009", "vs0:/sys/external/dbutil.suprx"); 416 | dumpModuleByPath("28000000000280ae", "vs0:/sys/external/friend_select.suprx"); 417 | dumpModuleByPath("2800000000028087", "vs0:/sys/external/incoming_dialog.suprx"); 418 | dumpModuleByPath("280000000002800c", "vs0:/sys/external/ini_file_processor.suprx"); 419 | dumpModuleByPath("2800000000028083", "vs0:/sys/external/libatrac.suprx"); 420 | dumpModuleByPath("280000000002800e", "vs0:/sys/external/libc.suprx"); 421 | dumpModuleByPath("280000000002800f", "vs0:/sys/external/libcdlg.suprx"); 422 | dumpModuleByPath("28000000000280aa", "vs0:/sys/external/libcdlg_calendar_review.suprx"); 423 | dumpModuleByPath("2800000000028079", "vs0:/sys/external/libcdlg_cameraimport.suprx"); 424 | dumpModuleByPath("2800000000028010", "vs0:/sys/external/libcdlg_checkout.suprx"); 425 | dumpModuleByPath("2800000000017003", "vs0:/sys/external/libcdlg_companion.suprx"); 426 | dumpModuleByPath("280000000002807c", "vs0:/sys/external/libcdlg_compat.suprx"); 427 | dumpModuleByPath("2800000000028090", "vs0:/sys/external/libcdlg_cross_controller.suprx"); 428 | dumpModuleByPath("2800000000028011", "vs0:/sys/external/libcdlg_friendlist.suprx"); 429 | dumpModuleByPath("28000000000280a8", "vs0:/sys/external/libcdlg_friendlist2.suprx"); 430 | dumpModuleByPath("28000000000280b1", "vs0:/sys/external/libcdlg_game_custom_data.suprx"); 431 | dumpModuleByPath("28000000000280b2", "vs0:/sys/external/libcdlg_game_custom_data_impl.suprx"); 432 | dumpModuleByPath("2800000000028012", "vs0:/sys/external/libcdlg_ime.suprx"); 433 | dumpModuleByPath("28000000000280af", "vs0:/sys/external/libcdlg_invitation.suprx"); 434 | dumpModuleByPath("28000000000280b0", "vs0:/sys/external/libcdlg_invitation_impl.suprx"); 435 | dumpModuleByPath("2800000000028013", "vs0:/sys/external/libcdlg_main.suprx"); 436 | dumpModuleByPath("2800000000028015", "vs0:/sys/external/libcdlg_msg.suprx"); 437 | dumpModuleByPath("280000000002809f", "vs0:/sys/external/libcdlg_near.suprx"); 438 | dumpModuleByPath("2800000000028017", "vs0:/sys/external/libcdlg_netcheck.suprx"); 439 | dumpModuleByPath("2800000000028089", "vs0:/sys/external/libcdlg_npeula.suprx"); 440 | dumpModuleByPath("28000000000280a9", "vs0:/sys/external/libcdlg_npprofile2.suprx"); 441 | dumpModuleByPath("280000000002801a", "vs0:/sys/external/libcdlg_np_message.suprx"); 442 | dumpModuleByPath("2800000000028082", "vs0:/sys/external/libcdlg_np_sns_fb.suprx"); 443 | dumpModuleByPath("280000000002801b", "vs0:/sys/external/libcdlg_np_trophy_setup.suprx"); 444 | dumpModuleByPath("280000000002801c", "vs0:/sys/external/libcdlg_photoimport.suprx"); 445 | dumpModuleByPath("280000000002801d", "vs0:/sys/external/libcdlg_photoreview.suprx"); 446 | dumpModuleByPath("2800000000020040", "vs0:/sys/external/libcdlg_pocketstation.suprx"); 447 | dumpModuleByPath("2800000000017004", "vs0:/sys/external/libcdlg_remote_osk.suprx"); 448 | dumpModuleByPath("280000000002801e", "vs0:/sys/external/libcdlg_savedata.suprx"); 449 | dumpModuleByPath("2800000000028096", "vs0:/sys/external/libcdlg_twitter.suprx"); 450 | dumpModuleByPath("280000000002809a", "vs0:/sys/external/libcdlg_tw_login.suprx"); 451 | dumpModuleByPath("28000000000280b3", "vs0:/sys/external/libcdlg_videoimport.suprx"); 452 | dumpModuleByPath("2800000000028020", "vs0:/sys/external/libclipboard.suprx"); 453 | dumpModuleByPath("2800000000028023", "vs0:/sys/external/libdbg.suprx"); 454 | dumpModuleByPath("2800000000028024", "vs0:/sys/external/libfiber.suprx"); 455 | dumpModuleByPath("2800000000028026", "vs0:/sys/external/libfios2.suprx"); 456 | dumpModuleByPath("2800000000028027", "vs0:/sys/external/libg729.suprx"); 457 | dumpModuleByPath("28000000000280a1", "vs0:/sys/external/libgameupdate.suprx"); 458 | dumpModuleByPath("280000000002807a", "vs0:/sys/external/libhandwriting.suprx"); 459 | dumpModuleByPath("2800000000028032", "vs0:/sys/external/libhttp.suprx"); 460 | dumpModuleByPath("2800000000028033", "vs0:/sys/external/libime.suprx"); 461 | dumpModuleByPath("2800000000028088", "vs0:/sys/external/libipmi_nongame.suprx"); 462 | dumpModuleByPath("2800000000028036", "vs0:/sys/external/liblocation.suprx"); 463 | dumpModuleByPath("280000000002809c", "vs0:/sys/external/liblocation_extension.suprx"); 464 | dumpModuleByPath("2800000000028092", "vs0:/sys/external/liblocation_factory.suprx"); 465 | dumpModuleByPath("2800000000028091", "vs0:/sys/external/liblocation_internal.suprx"); 466 | dumpModuleByPath("280000000002002c", "vs0:/sys/external/libmln.suprx"); 467 | dumpModuleByPath("2800000000024003", "vs0:/sys/external/libmlnapplib.suprx"); 468 | dumpModuleByPath("2800000000020031", "vs0:/sys/external/libmlndownloader.suprx"); 469 | dumpModuleByPath("2800000000028078", "vs0:/sys/external/libnaac.suprx"); 470 | dumpModuleByPath("2800000000028037", "vs0:/sys/external/libnet.suprx"); 471 | dumpModuleByPath("2800000000028038", "vs0:/sys/external/libnetctl.suprx"); 472 | dumpModuleByPath("2800000000028039", "vs0:/sys/external/libngs.suprx"); 473 | dumpModuleByPath("280000000002803a", "vs0:/sys/external/libpaf.suprx"); 474 | dumpModuleByPath("2800000000020039", "vs0:/sys/external/libpaf_web_map_view.suprx"); 475 | dumpModuleByPath("280000000002803c", "vs0:/sys/external/libperf.suprx"); 476 | dumpModuleByPath("280000000002803d", "vs0:/sys/external/libpgf.suprx"); 477 | dumpModuleByPath("280000000002803e", "vs0:/sys/external/libpvf.suprx"); 478 | dumpModuleByPath("2800000000028043", "vs0:/sys/external/librudp.suprx"); 479 | dumpModuleByPath("2800000000028044", "vs0:/sys/external/libsas.suprx"); 480 | dumpModuleByPath("280000000002809e", "vs0:/sys/external/libsceavplayer.suprx"); 481 | dumpModuleByPath("2800000000028093", "vs0:/sys/external/libSceBeisobmf.suprx"); 482 | dumpModuleByPath("2800000000028094", "vs0:/sys/external/libSceBemp2sys.suprx"); 483 | dumpModuleByPath("2800000000017002", "vs0:/sys/external/libSceCompanionUtil.suprx"); 484 | dumpModuleByPath("280000000002808d", "vs0:/sys/external/libSceDtcpIp.suprx"); 485 | dumpModuleByPath("2800000000028045", "vs0:/sys/external/libSceFt2.suprx"); 486 | dumpModuleByPath("2800000000028046", "vs0:/sys/external/libscejpegarm.suprx"); 487 | dumpModuleByPath("2800000000028047", "vs0:/sys/external/libscejpegencarm.suprx"); 488 | dumpModuleByPath("28000000000280ad", "vs0:/sys/external/libSceJson.suprx"); 489 | dumpModuleByPath("2800000000028076", "vs0:/sys/external/libscemp4.suprx"); 490 | dumpModuleByPath("28000000000280a4", "vs0:/sys/external/libSceMp4Rec.suprx"); 491 | dumpModuleByPath("2800000000028048", "vs0:/sys/external/libSceMusicExport.suprx"); 492 | dumpModuleByPath("280000000002809b", "vs0:/sys/external/libSceNearDialogUtil.suprx"); 493 | dumpModuleByPath("2800000000028049", "vs0:/sys/external/libSceNearUtil.suprx"); 494 | dumpModuleByPath("280000000002804a", "vs0:/sys/external/libScePhotoExport.suprx"); 495 | dumpModuleByPath("2800000000028081", "vs0:/sys/external/libScePromoterUtil.suprx"); 496 | dumpModuleByPath("280000000002804b", "vs0:/sys/external/libSceScreenShot.suprx"); 497 | dumpModuleByPath("280000000002804c", "vs0:/sys/external/libSceShutterSound.suprx"); 498 | dumpModuleByPath("280000000002804d", "vs0:/sys/external/libSceSqlite.suprx"); 499 | dumpModuleByPath("280000000002808a", "vs0:/sys/external/libSceTelephonyUtil.suprx"); 500 | dumpModuleByPath("28000000000280a3", "vs0:/sys/external/libSceTeleportClient.suprx"); 501 | dumpModuleByPath("28000000000280a2", "vs0:/sys/external/libSceTeleportServer.suprx"); 502 | dumpModuleByPath("2800000000024001", "vs0:/sys/external/libSceVideoExport.suprx"); 503 | dumpModuleByPath("2800000000020034", "vs0:/sys/external/libSceVideoSearchEmpr.suprx"); 504 | dumpModuleByPath("280000000002804f", "vs0:/sys/external/libSceXml.suprx"); 505 | dumpModuleByPath("2800000000028050", "vs0:/sys/external/libshellsvc.suprx"); 506 | dumpModuleByPath("2800000000028051", "vs0:/sys/external/libssl.suprx"); 507 | dumpModuleByPath("2800000000028052", "vs0:/sys/external/libsulpha.suprx"); 508 | dumpModuleByPath("2800000000028053", "vs0:/sys/external/libsystemgesture.suprx"); 509 | dumpModuleByPath("2800000000028054", "vs0:/sys/external/libult.suprx"); 510 | dumpModuleByPath("2800000000028055", "vs0:/sys/external/libvoice.suprx"); 511 | dumpModuleByPath("2800000000028056", "vs0:/sys/external/libvoiceqos.suprx"); 512 | dumpModuleByPath("2800000000028057", "vs0:/sys/external/livearea_util.suprx"); 513 | dumpModuleByPath("28000000000280a0", "vs0:/sys/external/mail_api_for_local_libc.suprx"); 514 | dumpModuleByPath("2800000000028058", "vs0:/sys/external/near_profile.suprx"); 515 | dumpModuleByPath("2800000000028085", "vs0:/sys/external/notification_util.suprx"); 516 | dumpModuleByPath("2800000000028059", "vs0:/sys/external/np_activity.suprx"); 517 | dumpModuleByPath("280000000002805a", "vs0:/sys/external/np_activity_sdk.suprx"); 518 | dumpModuleByPath("280000000002805b", "vs0:/sys/external/np_basic.suprx"); 519 | dumpModuleByPath("280000000002805c", "vs0:/sys/external/np_commerce2.suprx"); 520 | dumpModuleByPath("280000000002805d", "vs0:/sys/external/np_common.suprx"); 521 | dumpModuleByPath("28000000000280a7", "vs0:/sys/external/np_common_ps4.suprx"); 522 | dumpModuleByPath("280000000002805e", "vs0:/sys/external/np_friend_privacylevel.suprx"); 523 | dumpModuleByPath("280000000002805f", "vs0:/sys/external/np_kdc.suprx"); 524 | dumpModuleByPath("2800000000028060", "vs0:/sys/external/np_manager.suprx"); 525 | dumpModuleByPath("2800000000028061", "vs0:/sys/external/np_matching2.suprx"); 526 | dumpModuleByPath("2800000000028062", "vs0:/sys/external/np_message.suprx"); 527 | dumpModuleByPath("2800000000028074", "vs0:/sys/external/np_message_contacts.suprx"); 528 | dumpModuleByPath("2800000000028075", "vs0:/sys/external/np_message_dialog_impl.suprx"); 529 | dumpModuleByPath("2800000000028095", "vs0:/sys/external/np_message_padding.suprx"); 530 | dumpModuleByPath("2800000000028063", "vs0:/sys/external/np_party.suprx"); 531 | dumpModuleByPath("2800000000028064", "vs0:/sys/external/np_ranking.suprx"); 532 | dumpModuleByPath("280000000002808f", "vs0:/sys/external/np_signaling.suprx"); 533 | dumpModuleByPath("2800000000028084", "vs0:/sys/external/np_sns_facebook.suprx"); 534 | dumpModuleByPath("2800000000028065", "vs0:/sys/external/np_trophy.suprx"); 535 | dumpModuleByPath("2800000000028066", "vs0:/sys/external/np_tus.suprx"); 536 | dumpModuleByPath("2800000000028067", "vs0:/sys/external/np_utility.suprx"); 537 | dumpModuleByPath("28000000000280a6", "vs0:/sys/external/np_webapi.suprx"); 538 | dumpModuleByPath("280000000002808b", "vs0:/sys/external/party_member_list.suprx"); 539 | dumpModuleByPath("280000000002808e", "vs0:/sys/external/psmkdc.suprx"); 540 | dumpModuleByPath("280000000002808c", "vs0:/sys/external/pspnet_adhoc.suprx"); 541 | dumpModuleByPath("28000000000280ab", "vs0:/sys/external/signin_ext.suprx"); 542 | dumpModuleByPath("280000000002806e", "vs0:/sys/external/sqlite.suprx"); 543 | dumpModuleByPath("280000000002806f", "vs0:/sys/external/store_checkout_plugin.suprx"); 544 | dumpModuleByPath("2800000000024002", "vs0:/sys/external/trigger_util.suprx"); 545 | dumpModuleByPath("2800000000028073", "vs0:/sys/external/web_ui_plugin.suprx"); 546 | dumpModuleByPath("2800000000020002", "vs0:/vsh/common/app_settings.suprx"); 547 | dumpModuleByPath("2800000000020003", "vs0:/vsh/common/auth_plugin.suprx"); 548 | dumpModuleByPath("2800000000020004", "vs0:/vsh/common/av_content_handler.suprx"); 549 | dumpModuleByPath("280000000002002a", "vs0:/vsh/common/backup_restore.suprx"); 550 | dumpModuleByPath("2800000000020006", "vs0:/vsh/common/content_operation.suprx"); 551 | dumpModuleByPath("2800000000020007", "vs0:/vsh/common/dbrecovery_plugin.suprx"); 552 | dumpModuleByPath("2800000000020008", "vs0:/vsh/common/dbsetup.suprx"); 553 | dumpModuleByPath("280000000002003c", "vs0:/vsh/common/libBEAVCorePlayer.suprx"); 554 | dumpModuleByPath("280000000002000f", "vs0:/vsh/common/libFflMp4.suprx"); 555 | dumpModuleByPath("2800000000020044", "vs0:/vsh/common/libical.suprx"); 556 | dumpModuleByPath("2800000000020043", "vs0:/vsh/common/libicalss.suprx"); 557 | dumpModuleByPath("280000000002002c", "vs0:/vsh/common/libmarlin.suprx"); 558 | dumpModuleByPath("2800000000020013", "vs0:/vsh/common/libmarlindownloader.suprx"); 559 | dumpModuleByPath("280000000002002d", "vs0:/vsh/common/libmarlin_pb.suprx"); 560 | dumpModuleByPath("2800000000020014", "vs0:/vsh/common/libmtp.suprx"); 561 | dumpModuleByPath("280000000002003a", "vs0:/vsh/common/libmtphttp.suprx"); 562 | dumpModuleByPath("280000000002003b", "vs0:/vsh/common/libmtphttp_wrapper.suprx"); 563 | dumpModuleByPath("2800000000020037", "vs0:/vsh/common/libSenvuabsFFsdk.suprx"); 564 | dumpModuleByPath("2800000000020016", "vs0:/vsh/common/libvideoprofiler.suprx"); 565 | dumpModuleByPath("2800000000020038", "vs0:/vsh/common/mail_api_for_local.suprx"); 566 | dumpModuleByPath("2800000000020001", "vs0:/vsh/common/mms/AACPromoter.suprx"); 567 | dumpModuleByPath("2800000000020005", "vs0:/vsh/common/mms/bmp_promoter.suprx"); 568 | dumpModuleByPath("280000000002000b", "vs0:/vsh/common/mms/gif_promoter.suprx"); 569 | dumpModuleByPath("280000000002000e", "vs0:/vsh/common/mms/jpeg_promoter.suprx"); 570 | dumpModuleByPath("280000000002001a", "vs0:/vsh/common/mms/meta_gen.suprx"); 571 | dumpModuleByPath("280000000002001b", "vs0:/vsh/common/mms/Mp3Promoter.suprx"); 572 | dumpModuleByPath("280000000002001c", "vs0:/vsh/common/mms/MsvPromoter.suprx"); 573 | dumpModuleByPath("2800000000020020", "vs0:/vsh/common/mms/png_promoter.suprx"); 574 | dumpModuleByPath("2800000000020022", "vs0:/vsh/common/mms/RiffPromoter.suprx"); 575 | dumpModuleByPath("2800000000020023", "vs0:/vsh/common/mms/SensMe.suprx"); 576 | dumpModuleByPath("2800000000020027", "vs0:/vsh/common/mms/tiff_promoter.suprx"); 577 | dumpModuleByPath("280000000002001d", "vs0:/vsh/common/mtpr3.suprx"); 578 | dumpModuleByPath("280000000002001e", "vs0:/vsh/common/mtp_client.suprx"); 579 | dumpModuleByPath("280000000002002f", "vs0:/vsh/common/np_grief_report.suprx"); 580 | dumpModuleByPath("280000000002003f", "vs0:/vsh/game/gamecard_installer_plugin.suprx"); 581 | dumpModuleByPath("2800000000020009", "vs0:/vsh/game/gamedata_plugin.suprx"); 582 | dumpModuleByPath("2800000000000014", "vs0:/vsh/initialsetup/initialsetup.self"); 583 | dumpModuleByPath("280000000002003e", "vs0:/vsh/online_storage/online_storage_plugin.suprx"); 584 | dumpModuleByPath("2800000000020029", "vs0:/vsh/shell/auth_reset_plugin.suprx"); 585 | dumpModuleByPath("280000000002002e", "vs0:/vsh/shell/idu_update_plugin.suprx"); 586 | dumpModuleByPath("280000000002000c", "vs0:/vsh/shell/ime_plugin.suprx"); 587 | dumpModuleByPath("280000000002000d", "vs0:/vsh/shell/impose_net_plugin.suprx"); 588 | dumpModuleByPath("280000000002003d", "vs0:/vsh/shell/liblocation_dolce_provider.suprx"); 589 | dumpModuleByPath("2800000000020010", "vs0:/vsh/shell/liblocation_permission.suprx"); 590 | dumpModuleByPath("2800000000020018", "vs0:/vsh/shell/livespace_db.suprx"); 591 | dumpModuleByPath("2800000000020019", "vs0:/vsh/shell/location_dialog_plugin.suprx"); 592 | dumpModuleByPath("2800000000000001", "vs0:/vsh/shell/shell.self"); 593 | dumpModuleByPath("2800000000020025", "vs0:/vsh/shell/telephony/initial_check/tel_initial_check_plugin.suprx"); 594 | 595 | 596 | 597 | psvDebugScreenPrintf("Done\n"); 598 | 599 | //_exit_: 600 | 601 | while (1) {} 602 | 603 | sceKernelExitProcess(0); 604 | return 0; 605 | } 606 | --------------------------------------------------------------------------------