سلام
من یه آرایه از جنس unsigned char با 8 عضو دارم که میخوام به کل این 64 بیت از 0 تا انتها مرحله به مرحله اضافه بشه یعنی تمام حالات یک عدد 64 بیتی
اگه کمک کنید ممنون میشم
سلام
من یه آرایه از جنس unsigned char با 8 عضو دارم که میخوام به کل این 64 بیت از 0 تا انتها مرحله به مرحله اضافه بشه یعنی تمام حالات یک عدد 64 بیتی
اگه کمک کنید ممنون میشم
اگر هدف اصلی رو مشخص کنید خیلی بهتره.
درضمن امیدوارم اطلاع داشته باشید که دارید راجع به چه عددی صحبت میکنید و من و بقیه افرادی که پاسخ میدهند رو سر کار نگذاشته باشید.
آخرین ویرایش به وسیله FastCode : پنج شنبه 07 شهریور 1392 در 01:15 صبح دلیل: "و"
سلام.
تعداد حالات ممکن برابر 2 به توان 64 هست که میشه :18446744073709551616
این تعداد حالت مختلف برای یک عدد 64 بیتی وجود داره.
سر کار کدومه دیگه...
میخوام از 0 تا 18446744073709551616 رو بشمارم...همین!
خب الان مشکلت چیه؟ سوالتو واضح بپرس؟!
مشکلم اینه که نمیدونم چه جوری این شمارنده رو کدنویسی کنم
یه راهش اینه ک ی متغییر int64 رو افزایش بدم ولی نمیدونم چه جوری در هر مرحله به آرایه 8 عضوی از char تبدیلش کنم
به این صورت می تونید عمل کنید.
#include <iostream>
#include <limits>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
union type1
{
unsigned __int64 a;
unsigned char b[8];
};
type1 k;
for (__int64 i =0; i < numeric_limits<__int64>::max();i++)
{
k.a = i;
for (int j=7;j >= 0;j--)
cout << (int)k.b[j];
cout << endl;
}
return 0;
}
در جریان که هستید این حلقه هیچ موقع تموم نمیشه؟
برای همین پرسیدم هدف چیه.
ممکن بود بشه multi-thread ش کرد یا حتی روی GPU نوشتش.
نه متوجه نیستم ممنون میشم توضیح بدید
و اینکه اون دوتا COUT چی کار میکنن/.
راستی...
هدفم بروتال فورس اتک به یه سیستم هست.
1.brute با brutal فرق داره.
2.سیستمتون چیه؟
چرا با محصولات آماده مثل jtr کار نمیکنید؟
با سلام.
اگر تابع CopyMemory را درک کنید می توانید به راحتی روشی که در اینجا گفتم را در C++ هم پیاده کنید. C++ برای چنین عملیاتی (چه از نظر سرعت و چه از نظر پیاده سازی) مناسب تر است.
به هر حال این نمونه C++:
//in the name of god
//اللهم صل علی محمد و آل محمد
// UINT64ToBuffer.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdlib.h>
#include <iostream>
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
char* buffer=new char[8];
for(UINT64 i=0;i<=2^64;i++)
{
CopyMemory(buffer,&i,8);
//do your task
//show the generated string
std::cout<<buffer<<"\n";
//رحمی به ram و cpu
if(i%255*255==0)
{
system("cls");
Sleep(100);
}
}
return 0;
}
صدایی بیپی که احیانا زمان اجرای کد می شنوید به دلیل چاپ کاراکتر شماره 7 (bell) توسط تابع cout است.
چشم ظاهر گر نبیند عیب نیست چشم دل گر ننگرد باید گریست**********اَلسَّلامُ عَلَى الْحُسَيْنِ وَ عَلى عَلِىِّ بْنِ الْحُسَيْنِ وَ عَلى اَوْلادِ الْحُسَيْنِ وَ عَلى اَصْحابِ الْحُسَيْنِ
ظاهرا شما هنوز در جریان موضوع قرار نگرفتی.
ایشون این کار رو برای بروتفورس میخواد.و
۱.هنوز نگفته چه الگوریتمی.
۲.هنوز نمیدونه بروت فورس رو چطوری مینویسن.یعنی فکر میکنه باید به بایتها دسترسی داشته باشه.در صورتی که نیاز نداره.
۳. یک عدد ۶۴ بیتی چیزی نیست که بخواهید به ازای همه ی بایت های permutation هاش صدا بشنوید
۴.اگر یک مقدار فکر کنید متوجه میشید هیچ سیستمی حتی اگر یک بایت memory leak هم نداشته باشه نمیتونه زیر این تعداد fork دوام بیاره.
۵.این کار حتی با gpu هم یک مدت طول میکشه.با GPU من تقریبا ۱۴ ماه.با cpu خیلی میشه.(فقط loop)
من میتونم یه حلقه بنویسم که از 0 تا 18446744073709551616
رو بشماره ولی به اسمبلی و نمیدونم که تو اینلاین اسمبلی جواب میده یا نه.(که به احتمال زیاد میده)
درضمن بهتر واسه شمارش از 0 تا 18446744073709551616 از یه ابر رایانه بهره ببری
چون با این سیستم های ما خیلی خیلی خیلی خیلی (ادامه دارد ) زمان میبره.
STACKSG SEGMENT STACK 'STACK'
DB 64H DUP(0)
STACKSG ENDS
DATASG SEGMENT 'DATA'
DATASG ENDS
CODESG SEGMENT 'CODE'
ASSUME SS:STACKSG,DS:DATASG,CS:CODESG
MAIN PROC NEAR
MOV AX,DATASG
MOV DS,AX
XOR EAX,EAX
XOR EBX,EBX
XOR ECX,ECX
LABEL1:
ADC EAX,1
ADC EBX,0
ADC ECX,0
CMP ECX,1
JNE LABEL1
MOV AX,4C00H
INT 21H
MAIN ENDP
CODESG ENDS
END MAIN
تو VC++ هم یه همچین چیزی میشه:
__ASM{
XOR EAX,EAX
XOR EBX,EBX
XOR ECX,ECX
LABEL1:
ADC EAX,1
ADC EBX,0
ADC ECX,0
CMP ECX,1
JNE LABEL1
}
آخرین ویرایش به وسیله darknes666 : جمعه 08 شهریور 1392 در 21:17 عصر
@darkness عزیز با این سبک اسمبلی نوشتن آدم به خودشم شک می کنه چیزه سختیم نیستا !!!!!!
اتفاقا شما ابروی هرچی اسمبلی هست رو بردی.
عزیزم اگر میخواستم از xmm استفاده میکردم دیگه.
کلا میخوام رک باشم.
شما که این هم ادعات میشه هنوز یاد نگرفتی برو جلوی کرکر ها رو بگیر. شاید یک ثانیه دیرتر فهمیدیم داش
دیگه x64 نوشتی خیلی شاخی؟
بیا اینم Xmm
MOV XMM0,0
LABEL1:
INC XMM0
CMP XMM0,18446744073709551616;
JNE LABEL1
آخرین ویرایش به وسیله darknes666 : جمعه 08 شهریور 1392 در 22:48 عصر
اشکالش کجاست؟
این fastcod خیلی شاخ بازی در میاره(شرمنده ولی دیگه حقیقته)
شما دوتا ثبات x64 نوشتی فک کردی دیگه چی هستی؟
فک میکنی این به عقل بقیه نمیرسه؟
کد شما از اون ور کلا مشکل داره.
(مشکلاتشم خواستی بگو تا بگم بلکه یاد گرفتی)
کد بنده کاملا کار میکنه و بهینه تر هم هست.
آخرین ویرایش به وسیله darknes666 : جمعه 08 شهریور 1392 در 22:55 عصر
درود به همه
لطفاً اگه قصد ادامه دادن دارید ، شرط ادب هم رعایت کنید و بیشتر به هم احترام بگذارید !
Everything that has a beginning has an end. ... The End?
معذرت از همه ی دوستان اما اینم بگم چون احساس میکنم جاش خالیه.با معذرت از همه.
من یک مقدار از همون ابتدا با fastcode مشکل داشتم.
الان fastcode اینجا نیست تا جوابمو بده ولی من یه سری حرف ها رو میخوام بگم.
الان از این همه جواب تو به جواب همه گیر دادی.و خودت یه جواب درست ندادی.
خوب فکر میکنی بقیه هیچی بلد نیستن؟
من که فکر نمیکنم.
اولا من کد اقای مصطفی ساتکی رو تحلیل نکردم و نمیدونم قضیش چیه.
ولی حد اقل در مورد کد خودم بگم:
بنده یه عالمه سخت افزار خوندم(ادعایی ندارم تازه میفهمم چقدر دیگه باید بخونم) و از اسمبلی x64 بیت هم به اندازه ای بلدم که برنامه های نسبتا سخت رو بنویسم و اگر فکر میکنی کدت خیلی بهتر از واسه منه باید بگم در اشتباهی.دلیلشم یه متن کوتاه نیست بنویسم برات تموم بشه دلیلش یه فصل از کتاب سخت افزار میشه.(خیلی اسرار داشتی جوابشم مینیویسم)
درضمن فکر میکنی تو اسمبلی خیلی حرفه ای هستی؟
وقتی از طریق c میشه یه سوالو از 10000 راه حل کرد تو اسمبلی از 1000000000 راه میشه حلش کرد.
پس کم من رو مسخره کن.
مگه داری بوت لودر مینیویسی که توی هر خط باید بحث و جدل کنی؟
یا داری bios مینیویسی.
پست هات رو نگاه کن.پر از کلمات اینگیلیسی و اصطلاحه تا بگی من خیلی میدونم.(من اینجوری برداشت میکنم اگر اشتباه میکنم معذرت)
گرچه هیچ کدوم از کلماتتم خیلی سطح بالا نیست.فقط باید اینگیلیسی بلد باشی تا در عرض 5دقیقه معنی شو در بیاری.
شرط میبندم این حرفام نه تنها قانعت نمیکنه بلکه دلیلی میشه که برای حفظ غرورت بدتر به من حمله کنی.
از دوستان معذرت میخوام ولی گیر کرده بود تو دلم.بازم معذرت مخصوصا از آقای بهروز عباسی.
دوست عزیز (قصد توهین ندارم) جناب آقای fast از این کلمات زیاد استفاده میکنه که شما مجبوری یکم بیشتر تحقیق کنی.
اول بگم permutation همون جایگشت ریاضیات خودمونه (استاد ما هم همش میگه permutation) خب یعنی ممکنه شما نتونی خونه ای از حافظه ی کامپیوتر رو پیدا کنی که عددی که بهش اشاره میکنه 64 بیتی باشه.
و دومی memory leak که خیلی سادس یعنی این که برنامه اشتباهی حافظه ی پویا تخصیص کنه.
همچین کاری شدنی نیست اصلا کم کمش چند سال طول می کشه حالا میخواد با اسمبلی باشه یا هرچیز دیگه ای
من نمیدونم چرا همچین سوال ساده ای رو این قدر کش میدین؟! یک for که بیشتر نیست!
واسه این کار روش های دیگه ای هم هست که با سیرچ کردن راحت پیدا می کنی
مثلا http://en.wikipedia.org/wiki/Dictionary_attack
در ضمن شما که می خوای همچین کارایی بکنی اصولش اینه که اول C++ و اسمبلی رو درست یاد بگیری!
حرف شما منطقی.
fastcode هم همینو گفت.
من هم همینو میگم.
مشکل الگوریتم نیست مشکل تجهیزاته.
وگر نه شما اگر تجهیزاتشو داشتی و جریان برقو خیلی خوب کنترل میکردی از رجیستر zmm میتونستی استفاده کنی(فعلا خیالی بیش نیست) که غمی دیگه نداشتی.شما باید سخت افزار خیلی قویی تهیه کنی.
با همین رجیستر های zmm راحت میشه این کار رو کرد
XOR ZMM0,ZMM0
LABEL1:
INC ZMM0
CMP ZMM0,18446744073709551616;
JNE LABEL1
و حتی بیشتر تا 2 به توان 512.
ولی لازمش کنترل جریان برق و اورکلاک کردن و داشتن چندین هزارتا از cpu مورد نیازه.( Intel Xeon Phi)
آخرین ویرایش به وسیله darknes666 : شنبه 09 شهریور 1392 در 00:58 صبح
من شاخ بازی در میارم چون تنها کسی هستم که وقتی به کدت نگاه میکنم میفهمم عددی که نوشتی توی ۶۴ بیت جا نمیشهMOV XMM0,0
LABEL1:
INC XMM0
CMP XMM0,18446744073709551616;
JNE LABEL1
در ضمن ۳ خط اول پستت رو هم بیشتر نخوندم چون میتونستم حدث بزنم توش چی نوشتی.
برام مهم نیست.در ضمن تنها کسی نیستی که میفهمه.
بچه هم برم ویکی پدیا رو بخونه میفهمه افتاد؟
http://en.wikipedia.org/wiki/Streami...ions#Registers
درضمن فکر نکردی که چرا این کد رو اول قرار ندادم؟
چون خودمم میدونستم جا نمیشه.
ادم شاخیم نیستی همچین.
آخرین ویرایش به وسیله darknes666 : شنبه 09 شهریور 1392 در 02:09 صبح
ببین عزیزم.الان ساعت نزدیک ۳ صبحه.من تا ۸ صبح بیدارم چون کار دارم.اگر هم وسطش یک سر به این سایت میزنم برای اینه که خستگیم در بره.الان هم واقعا وقت و از اون مهمتر اعصاب کل کل ندارم که چرا کدت دیرتر اجرا میشه یا چرا pipeline-hicup داره یا چرا بهتره حلقه رو از آخر به اول بیایی.
اگر OP میخواد بحث رو ادامه بده من هستم.در غیر این صورت واقعا دوست دارم تاپیک قفل بشه.
آخرین ویرایش به وسیله darknes666 : شنبه 09 شهریور 1392 در 02:58 صبح
خوش به حال تو که اینقدر میفهمی branching و data bandwidth چیه.
برای اینکه ببینی خطا چقدره بد نیست یه سری به این مقاله بزنی:
http://en.wikipedia.org/wiki/Gambler%27s_fallacy
هر چیزی که تو بخواهی فکرش رو بکنی رو من قبلا کدش رو نوشتم.
بچه اخه این چیه نوشتی
MOV XMM0,0
LABEL1:
INC XMM0
CMP XMM0,18446744073709551616;
JNE LABEL1
انصافا ابروی اسمبل رو بردی
دقت کردین هرجا ایشون میاد جنگ میشه
حالا ی سوال اصلا برا چی می خوین چنین کاری کنید ؟
MOV XMM0,0 اشتباههاین کد اشتباهی به جر این که مقدارش تو xmm نمیتونه قرار بگیره نداره.
INC XMM0 اشتباهه
CMP XMM0,18446744073709551616 اشتباهه
فقط دستوراخرت درسته افرین
اگر اشتباه بود nasm بهش گیر میداد.
دلیل احتمالی این که فکر میکنی اشتباهه اینه:
به جای MOVSS یا MOVAPS, MOVUPS, MOVLPS, MOVHPS, MOVLHPS, MOVHLPS از MOV استفاده کردم که کاملا درسته و مشکلی نداره.(میتونی تو nASM خودت امتحان کنی البته اگر بلدی)
به جای CMPSS, COMISS, UCOMISS,CMPPS از CMP استفاده کردم که مشابه بالاست.
INC هم مشکلی نداره شما فک کردی حتما باید مینوشتم
ADDS XMM0,1
من دیگه فقط به OP پاسخ میدم.
۱۰ تا نکته توی کدها رو نوشته هاتون بود که واقعا دوست ندارم سرشون دعوا کنم چون آقای ساتکی شخصا ازم خواستن.لطفا ادامه ندید.