Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Side by Side Diff: third_party/mach_override/mach_override.c

Issue 22798004: Randomize mach_override_ptr trampoline addresses on 32-bit (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Use VM_FLAGS_ANYWHERE rather than 1 Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « third_party/mach_override/README.chromium ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /******************************************************************************* 1 /*******************************************************************************
2 mach_override.c 2 mach_override.c
3 Copyright (c) 2003-2009 Jonathan 'Wolf' Rentzsch: <http://rentzs ch.com> 3 Copyright (c) 2003-2009 Jonathan 'Wolf' Rentzsch: <http://rentzs ch.com>
4 Some rights reserved: <http://opensource.org/licenses/mit-licens e.php> 4 Some rights reserved: <http://opensource.org/licenses/mit-licens e.php>
5 5
6 ************************************************************************ ***/ 6 ************************************************************************ ***/
7 7
8 #include "mach_override.h" 8 #include "mach_override.h"
9 9
10 #include <mach-o/dyld.h> 10 #include <mach-o/dyld.h>
11 #include <mach/mach_host.h> 11 #include <mach/mach_host.h>
12 #include <mach/mach_init.h> 12 #include <mach/mach_init.h>
13 #include <mach/vm_map.h> 13 #include <mach/vm_map.h>
14 #include <mach/vm_statistics.h>
14 #include <sys/mman.h> 15 #include <sys/mman.h>
15 16
16 #include <CoreServices/CoreServices.h> 17 #include <CoreServices/CoreServices.h>
17 18
18 /************************** 19 /**************************
19 * 20 *
20 * Constants 21 * Constants
21 * 22 *
22 **************************/ 23 **************************/
23 #pragma mark - 24 #pragma mark -
(...skipping 348 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 ************************************************************************ ***/ 373 ************************************************************************ ***/
373 374
374 mach_error_t 375 mach_error_t
375 allocateBranchIsland( 376 allocateBranchIsland(
376 BranchIsland **island, 377 BranchIsland **island,
377 void *originalFunctionAddress) 378 void *originalFunctionAddress)
378 { 379 {
379 assert( island ); 380 assert( island );
380 381
381 assert( sizeof( BranchIsland ) <= kPageSize ); 382 assert( sizeof( BranchIsland ) <= kPageSize );
383 #if defined(__i386__)
384 vm_address_t page = 0;
385 mach_error_t err = vm_allocate( mach_task_self(), &page, kPageSize, VM_F LAGS_ANYWHERE );
386 if( err == err_none ) {
387 *island = (BranchIsland*) page;
388 return err_none;
389 }
390 return err;
391 #else
392
382 #if defined(__ppc__) || defined(__POWERPC__) 393 #if defined(__ppc__) || defined(__POWERPC__)
383 vm_address_t first = 0xfeffffff; 394 vm_address_t first = 0xfeffffff;
384 vm_address_t last = 0xfe000000 + kPageSize; 395 vm_address_t last = 0xfe000000 + kPageSize;
385 #elif defined(__x86_64__) 396 #elif defined(__x86_64__)
386 vm_address_t first = ((uint64_t)originalFunctionAddress & ~(uint64_t)((( uint64_t)1 << 31) - 1)) | ((uint64_t)1 << 31); // start in the middle of the pag e? 397 vm_address_t first = ((uint64_t)originalFunctionAddress & ~(uint64_t)((( uint64_t)1 << 31) - 1)) | ((uint64_t)1 << 31); // start in the middle of the pag e?
387 vm_address_t last = 0x0; 398 vm_address_t last = 0x0;
388 #else
389 vm_address_t first = 0xffc00000;
390 vm_address_t last = 0xfffe0000;
391 #endif 399 #endif
392 400
393 vm_address_t page = first; 401 vm_address_t page = first;
394 vm_map_t task_self = mach_task_self(); 402 vm_map_t task_self = mach_task_self();
395 403
396 while( page != last ) { 404 while( page != last ) {
397 mach_error_t err = vm_allocate( task_self, &page, kPageSize, 0 ) ; 405 mach_error_t err = vm_allocate( task_self, &page, kPageSize, 0 ) ;
398 if( err == err_none ) { 406 if( err == err_none ) {
399 *island = (BranchIsland*) page; 407 *island = (BranchIsland*) page;
400 return err_none; 408 return err_none;
401 } 409 }
402 if( err != KERN_NO_SPACE ) 410 if( err != KERN_NO_SPACE )
403 return err; 411 return err;
404 #if defined(__x86_64__) 412 #if defined(__x86_64__)
405 page -= kPageSize; 413 page -= kPageSize;
406 #else 414 #else
407 page += kPageSize; 415 page += kPageSize;
408 #endif 416 #endif
409 err = err_none; 417 err = err_none;
410 } 418 }
411 419
412 return KERN_NO_SPACE; 420 return KERN_NO_SPACE;
421 #endif
413 } 422 }
414 423
415 /***************************************************************************//** 424 /***************************************************************************//**
416 Implementation: Deallocates memory for a branch island. 425 Implementation: Deallocates memory for a branch island.
417 426
418 @param island -> The island to deallocate. 427 @param island -> The island to deallocate.
419 @result <- mach_error_t 428 @result <- mach_error_t
420 429
421 ************************************************************************ ***/ 430 ************************************************************************ ***/
422 431
(...skipping 296 matching lines...) Expand 10 before | Expand all | Expand 10 after
719 ); 728 );
720 #elif defined(__x86_64__) 729 #elif defined(__x86_64__)
721 void atomic_mov64( 730 void atomic_mov64(
722 uint64_t *targetAddress, 731 uint64_t *targetAddress,
723 uint64_t value ) 732 uint64_t value )
724 { 733 {
725 *targetAddress = value; 734 *targetAddress = value;
726 } 735 }
727 #endif 736 #endif
728 #endif 737 #endif
OLDNEW
« no previous file with comments | « third_party/mach_override/README.chromium ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698