В кратце - Как замутить функцию, которая бы устанавливала jmp с одного оффсета на другой ? Хочу записать оффсет для jmp при помощи WriteProcessMemory. Например, так: Code: DWORD dwWhere = 0x004EA8CD; DWORD dwWhat = 0x6AAF2740; WriteProcessMemory(GetCurrentProcess(), (LPVOID)dwWhere, &dwWhat, sizeof(DWORD), NULL); Проблема в том что байты пишутся в обратном порядке... ? Любой отладчик говорит что jmp идёт совсем на другой адресс. Из ollydbg 1.10: Code: 004EA8CD -E9 4027AF6A JMP 6AFDD012 хотя мне нужно это: Code: 004EA8CD -E9 байты JMP 6AAF2740 Собственно, как такое реализуется ? Заранее благодарю.
Здравствуйте, можете подсказать, что это за сортировка (модифицированная) ? Гуглил, ничего не нашел, вот объяснение к этой сортировке. Просмотр массива начинается с первого элемента. Если для некоторого i a > a [i +1], то элементы a и a [i +1] меняются местами, после чего новый элемент a сравнивается и переставляется с предыдущими элементами массива. Затем просмотр массива возобновляется, начиная с элемента a [i +1] и т. д.. Массив будет упорядочена за один проход (Модифицированный обмен). Если можно, поделитесь функцией для этой сортировки, заранее спасибо! (нужно на с++)
Думается мне, что это "Гномья сортировка". http: // ru.wikipedia.org/wiki/%D0%93%D0%BD%D0%BE%D0%BC%D1%8C%D1%8F_%D1%81%D0%BE%D1%80%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%BA%D0%B0 P.S. Теперь ссылки на статьи в википедии блочатся как forbidden link?
Ну это точно не бабл сорт, хоть я тоже вначале подумал, но прочитал внимательно. В бабл сорте нет возвращение назад и там множество проходов по массиву. У него же описан алгоритм, который идёт от начала и до конца одним заходом. Gnomesort на мой взгляд, ну или что то схожее(сейчас почему то каждый третий норовит создать "свой" алгоритм сортировки.)
Почему выводит DIVIDE ERROR Code: void sums(cRectangle *r1){ double n,m,p[100]; int z=0,i,j,k,h; for(i=0;i<r1[0].length;i++){ for (j=(i+1);j<r1[0].length;j++){ for (k=0;k<4;k++){ for (h=0;h<4;h++){ n=((r1[j].ab[h].a.x-r1[i].ab[k].a.x)/(r1[i].ab[k].b.x-r1[i].ab[k].a.x))-((r1[j].ab[h].a.y-r1[i].ab[k].a.y)/(r1[i].ab[k].b.y-r1[i].ab[k].a.y)); m=((r1[j].ab[h].b.x-r1[i].ab[k].a.x)/(r1[i].ab[k].b.x-r1[i].ab[k].a.x))-((r1[j].ab[h].b.y-r1[i].ab[k].a.y)/(r1[i].ab[k].b.y-r1[i].ab[k].a.y)); if (n>0 || m<0 && n<0 || m>0){ n=((r1[i].ab[k].a.x-r1[j].ab[h].a.x)/(r1[j].ab[h].b.x-r1[j].ab[h].a.x))-((r1[i].ab[k].a.y-r1[j].ab[h].a.y)/(r1[j].ab[h].b.y-r1[j].ab[h].a.y)); m=((r1[i].ab[k].b.x-r1[j].ab[h].a.x)/(r1[j].ab[h].b.x-r1[j].ab[h].a.x))-((r1[i].ab[k].b.y-r1[j].ab[h].a.y)/(r1[j].ab[h].b.y-r1[j].ab[h].a.y)); if (n>0 || m<0 && n<0 || m>0){ p[z++]=r1[j].p+r1[i].p; cout << i << " " << j << " "<< k << " " << h << " "<<p[z-1] << endl; } } } } } } } Code: void sums(cRectangle *r1){ double n,m,p[100]; int z=0,i,j,k,h; for(i=0;i<r1[0].length;i++){ for (j=(i+1);j<r1[0].length;j++){ for (k=0;k<4;k++){ for (h=0;h<4;h++){ n=((r1[j].ab[h].a.x-r1[i].ab[k].a.x)/(r1[i].ab[k].b.x-r1[i].ab[k].a.x))-((r1[j].ab[h].a.y-r1[i].ab[k].a.y)/(r1[i].ab[k].b.y-r1[i].ab[k].a.y)); m=((r1[j].ab[h].b.x-r1[i].ab[k].a.x)/(r1[i].ab[k].b.x-r1[i].ab[k].a.x))-((r1[j].ab[h].b.y-r1[i].ab[k].a.y)/(r1[i].ab[k].b.y-r1[i].ab[k].a.y)); if (n>0 || m<0 && n<0 || m>0){ n=((r1[i].ab[k].a.x-r1[j].ab[h].a.x)/(r1[j].ab[h].b.x-r1[j].ab[h].a.x))-((r1[i].ab[k].a.y-r1[j].ab[h].a.y)/(r1[j].ab[h].b.y-r1[j].ab[h].a.y)); m=((r1[i].ab[k].b.x-r1[j].ab[h].a.x)/(r1[j].ab[h].b.x-r1[j].ab[h].a.x))-((r1[i].ab[k].b.y-r1[j].ab[h].a.y)/(r1[j].ab[h].b.y-r1[j].ab[h].a.y)); if (n>0 || m<0 && n<0 || m>0){ p[z++]=r1[j].p+r1[i].p; cout << i << " " << j << " "<< k << " " << h << " "<<p[z-1] << endl; } } } } system ("pause"); } } }
ставь Breakpoint и смотри пошагово где в твоих вычислениях возникает ошибка. Сдаётся мне, ты где то на ноль делишь. А вообще хардкорненько - всё аж пестрит. Такое ощущение, что ты пропустил код через обфускатор.
Для начала попробуй конструкт try-catch - попробуй точно отловить ошибку Потом когда узнаешь в каком месте ошибка - попробуй поставить на это место Breakpoint и посмотри, какие значения принимают твои переменные. Но в начале поправь свои условия. (n>0 || m<0 && n<0 || m>0) попробуй так ((n>0 || m<0) && (n<0 || m>0))
Могу только предположить, так как не знаю что ты там вычесляешь - если n ты высчитываешь используя r1[j].ab[h].a.x, то было бы логично предположить, что для m нужно использовать b на месте а и наолборот, а у тебя в перемешку идёт. Короче проверь формулу. Code: n=((r1[j].ab[h].a.x-r1[i].ab[k].a.x)/(r1[i].ab[k].b.x-r1[i].ab[k].a.x))-((r1[j].ab[h].a.y-r1[i].ab[k].a.y)/(r1[i].ab[k].b.y-r1[i].ab[k].a.y)); m=((r1[j].ab[h].[B]b[/B].x-r1[i].ab[k].[B]a[/B].x)/(r1[i].ab[k].[B]b[/B].x-r1[i].ab[k].[B]a[/B].x))-((r1[j].ab[h].[B]b[/B].y-r1[i].ab[k].[B]a[/B].y)/(r1[i].ab[k].[B]b[/B].y-r1[i].ab[k].[B]a[/B].y)); m=((r1[j].ab[h].b.x-r1.ab[k].a.x)/(r1.ab[k].b.x-r1.ab[k].a.x))-((r1[j].ab[h].b.y-r1.ab[k].a.y)/(r1.ab[k].b.y-r1.ab[k].a.y));
Code: Спасибо уже разобрался там просто деление на 0 было а формула ((x-x1)/(x2-x1))-((y-y1)/(y2-y1))
прогеры! тут мне курсач один чувак накатал, но объяснить ничего не пожелал, пожалуйста, объясните мне по строчкам что к чему:< 1. #include <stdlib.h> 2. #include <stdio.h> 3. 4. 5. int main() 6. { 7. 8. const int n=5; 9. 10. int linsize = n*n; 11. int *matrix = (int *)malloc(linsize * sizeof(int)); 12. for (int i=0; i<linsize; i++) 13. matrix = (rand() % 1000) - 500; 14. for (int yy=0; yy<n; yy++) 15. { 16. for (int xx=0; xx<n; xx++) 17. printf("%d\t",matrix[xx+yy*n]); 18. printf("\n"); 19. } 20. printf("\n"); 21. 22. //bubble sort 23. for (int j=0; j<n-2; j++) 24. for (int i=0; i<n-1; i++) 25. if (matrix[i*n+1] < matrix[(i+1)*n+1]) 26. { 27. int tmp = matrix[i*n+1]; 28. matrix[i*n+1] = matrix[(i+1)*n+1]; 29. matrix[(i+1)*n+1] = tmp; 30. } 31. 32. //vivod matrix 33. for (int yy=0; yy<n; yy++) 34. { 35. for (int xx=0; xx<n; xx++) 36. printf("%d\t",matrix[xx+yy*n]); 37. printf("\n"); 38. } 39. printf("\n"); 40. 41. 42. //mult 43. int mult = 1; 44. 45. for (int i=0; i<n-1; i++) 46. if (matrix[i*n] < 0) 47. mult *= matrix[i*n]; 48. 49. printf("Mult = %d\n\n",mult); 50. 51. //inverse 52. int rev = n/2; 53. 54. for (int i=0; i<rev; i++) 55. { 56. int tmp = matrix[i*n+i]; 57. int rv = (n - 1) - i; 58. matrix[i*n+i] = matrix[rv*n+rv]; 59. matrix[rv*n+rv] = tmp; 60. } 61. 62. //vivod matrix 63. for (int yy=0; yy<n; yy++) 64. { 65. for (int xx=0; xx<n; xx++) 66. printf("%d\t",matrix[xx+yy*n]); 67. printf("\n"); 68. } 69. printf("\n"); 70. 71. free(matrix); 72. } помогите, у меня курсач горит, а я сама не понимаю(( и киньте ссылочку на мануал какой нить для нубов...
Помогите, не знаю как решить проблему. Визуал студио ругается, что в строке if (str[x] == " ") str[x] = ""; не совместимы типы char и const char. Что делать? #include <iostream> #include <string> using namespace std; int main () { setlocale (LC_ALL, "Russian"); string str; cout << "Введите строку: "; getline (cin, str); for (int x = 0; x < str.size (); x++) { if (str[x] == " ") str[x] = ""; } str.replace (str.begin (), str.end (), " ", ""); cout << "Измененная строка: " << str; cout << endl << endl << endl; system ("pause"); return 0; }
Мне кажется ты допустил опечатку. Совместимость не char и const char, а char и const char*. str[x] - это один байт памяти, в котором по-любому будет что-то находится, и удалить этот байт ты никак не можешь. Разве только если в std::string есть специальный метод для удаления символа по индексу. Если такого метода нету (а я точно не помню) - формируй вторую строку на основе исходной. UPD. Уставший, безбожно наврал в своем ответе. Подправил. Сорри за предыдущий ответ если что.