Fix dex2oat on the Mac.

What did we do before valgrind? _NSGetExecutablePath was responsible for the
heap corruption. The vmmap(1) parsing was slightly off too.

Change-Id: Id458d99c0f75e70a5c59cfbd785ea2efebfbdfce
diff --git a/src/compiler.cc b/src/compiler.cc
index b3d6367..0bf4673 100644
--- a/src/compiler.cc
+++ b/src/compiler.cc
@@ -270,15 +270,10 @@
   // On Linux, dex2oat will have been built with an RPATH of $ORIGIN/../lib, so dlopen(3) will find
   // the .so by itself. On Mac OS, there isn't really an equivalent, so we have to manually do the
   // same work.
-  std::vector<char> executable_path(1);
   uint32_t executable_path_length = 0;
-  _NSGetExecutablePath(&executable_path[0], &executable_path_length);
-  while (_NSGetExecutablePath(&executable_path[0], &executable_path_length) == -1) {
-    executable_path.resize(executable_path_length);
-  }
-
-  executable_path.resize(executable_path.size() - 1); // Strip trailing NUL.
-  std::string path(&executable_path[0]);
+  _NSGetExecutablePath(NULL, &executable_path_length);
+  std::string path(executable_path_length, static_cast<char>(0));
+  CHECK_EQ(_NSGetExecutablePath(&path[0], &executable_path_length), 0);
 
   // Strip the "/dex2oat".
   size_t last_slash = path.find_last_of('/');
diff --git a/src/mem_map.cc b/src/mem_map.cc
index 93f60c4..62096b1 100644
--- a/src/mem_map.cc
+++ b/src/mem_map.cc
@@ -87,8 +87,8 @@
       continue;
     }
 
-    std::string start_str(line.substr(22, 8));
-    std::string end_str(line.substr(31, 8));
+    std::string start_str(line.substr(23, 8));
+    std::string end_str(line.substr(32, 8));
     uint32_t start = ParseHex(start_str);
     uint32_t end = ParseHex(end_str);
     CheckMapRegion(base, limit, start, end, maps);