]> git.saurik.com Git - ldid.git/blobdiff - ldid.cpp
Fixed a stupid bug in ldid that caused incorrect signatures occasionally.
[ldid.git] / ldid.cpp
index 4b284034dc79e64ebaac62612209ca917d62ad0a..b58198845e85b7c6bb597de995e9eeb0a63ae59b 100644 (file)
--- a/ldid.cpp
+++ b/ldid.cpp
@@ -316,7 +316,13 @@ int main(int argc, const char *argv[]) {
 
     std::vector<std::string> files;
 
-    _assert(argc != 0);
+    if (argc == 1) {
+        fprintf(stderr, "usage: %s -S[entitlements.xml] <binary>\n", argv[0]);
+        fprintf(stderr, "   %s -S cat\n", argv[0]);
+        fprintf(stderr, "   %s -Stfp.xml gdb\n", argv[0]);
+        exit(0);
+    }
+
     for (int argi(1); argi != argc; ++argi)
         if (argv[argi][0] != '-')
             files.push_back(argv[argi]);
@@ -492,7 +498,7 @@ int main(int argc, const char *argv[]) {
                         for (size_t i = 0; i != pages - 1; ++i)
                             sha1(hashes[i], top + 0x1000 * i, 0x1000);
                     if (pages != 0)
-                        sha1(hashes[pages - 1], top + 0x1000 * (pages - 1), data % 0x1000);
+                        sha1(hashes[pages - 1], top + 0x1000 * (pages - 1), ((data - 1) % 0x1000) + 1);
                 }
         }
 
@@ -547,7 +553,7 @@ int main(int argc, const char *argv[]) {
                 for (size_t i = 0; i != pages - 1; ++i)
                     sha1(hashes[i], top + 0x1000 * i, 0x1000);
             if (pages != 0)
-                sha1(hashes[pages - 1], top + 0x1000 * (pages - 1), data % 0x1000);
+                sha1(hashes[pages - 1], top + 0x1000 * (pages - 1), ((data - 1) % 0x1000) + 1);
 
             directory->hashOffset = Swap(offset - begin);
             offset += sizeof(*hashes) * pages;